tutorial tildacion para niños monosílabos monosilabos interrogativas exclamativas ejercicios ejemplos diacritica php diacritics

php - tildacion - Eliminar diacríticos de una cadena



tilde diacritica para niños (9)

Basado en la respuesta de Raugfer:

// removes diacritics from a string $regexp = ''/&([a-z]{1,2})(acute|cedil|circ|grave|lig|orn|ring|slash|th|tilde|uml|caron);/i''; echo html_entity_decode(preg_replace($regexp, ''$1'', htmlentities($str)));

¿Es posible? Esta es mi cadena de entrada:

ľ š č ť ž ý á í é Č Á Ž Ý

Esta es la salida que quiero:

l s c t z y a i e C A Z Y


Es posible que desee ver la función convert_accented_characters de CodeIgniter. Se define en system/helpers/text_helper.php y utiliza la matriz ubicada en application/config/foreign_chars.php .

Esto es lo que hace, en pocas palabras:

$foreign_characters = array( ''/ä|æ|ǽ/'' => ''ae'', ''/ö|œ/'' => ''oe'', ''/ü/'' => ''ue'', // etc. ); $array_from = array_keys($foreign_characters); $array_to = array_values($foreign_characters); $result = preg_replace($array_from, $array_to, $str);

Sin embargo, es un poco lento, ya que hace un montón de reemplazos de expresiones regulares. Tal vez debería probar iconv y remove_accents de WordPress.



Hay una función para traducir todos los caracteres en una cadena llamada strtr . Básicamente, puedes considerarlos como diferentes personajes y traducirlos como tales.


Hay una función que Wordpress usa y funciona bien. Aquí está el código de trabajo con salida.

<?php function seems_utf8($str) { $length = strlen($str); for ($i=0; $i < $length; $i++) { $c = ord($str[$i]); if ($c < 0x80) $n = 0; # 0bbbbbbb elseif (($c & 0xE0) == 0xC0) $n=1; # 110bbbbb elseif (($c & 0xF0) == 0xE0) $n=2; # 1110bbbb elseif (($c & 0xF8) == 0xF0) $n=3; # 11110bbb elseif (($c & 0xFC) == 0xF8) $n=4; # 111110bb elseif (($c & 0xFE) == 0xFC) $n=5; # 1111110b else return false; # Does not match any model for ($j=0; $j<$n; $j++) { # n bytes matching 10bbbbbb follow ? if ((++$i == $length) || ((ord($str[$i]) & 0xC0) != 0x80)) return false; } } return true; } /** * Converts all accent characters to ASCII characters. * * If there are no accent characters, then the string given is just returned. * * @param string $string Text that might have accent characters * @return string Filtered string with replaced "nice" characters. */ function remove_accents($string) { if ( !preg_match(''/[/x80-/xff]/'', $string) ) return $string; if (seems_utf8($string)) { $chars = array( // Decompositions for Latin-1 Supplement chr(195).chr(128) => ''A'', chr(195).chr(129) => ''A'', chr(195).chr(130) => ''A'', chr(195).chr(131) => ''A'', chr(195).chr(132) => ''A'', chr(195).chr(133) => ''A'', chr(195).chr(135) => ''C'', chr(195).chr(136) => ''E'', chr(195).chr(137) => ''E'', chr(195).chr(138) => ''E'', chr(195).chr(139) => ''E'', chr(195).chr(140) => ''I'', chr(195).chr(141) => ''I'', chr(195).chr(142) => ''I'', chr(195).chr(143) => ''I'', chr(195).chr(145) => ''N'', chr(195).chr(146) => ''O'', chr(195).chr(147) => ''O'', chr(195).chr(148) => ''O'', chr(195).chr(149) => ''O'', chr(195).chr(150) => ''O'', chr(195).chr(153) => ''U'', chr(195).chr(154) => ''U'', chr(195).chr(155) => ''U'', chr(195).chr(156) => ''U'', chr(195).chr(157) => ''Y'', chr(195).chr(159) => ''s'', chr(195).chr(160) => ''a'', chr(195).chr(161) => ''a'', chr(195).chr(162) => ''a'', chr(195).chr(163) => ''a'', chr(195).chr(164) => ''a'', chr(195).chr(165) => ''a'', chr(195).chr(167) => ''c'', chr(195).chr(168) => ''e'', chr(195).chr(169) => ''e'', chr(195).chr(170) => ''e'', chr(195).chr(171) => ''e'', chr(195).chr(172) => ''i'', chr(195).chr(173) => ''i'', chr(195).chr(174) => ''i'', chr(195).chr(175) => ''i'', chr(195).chr(177) => ''n'', chr(195).chr(178) => ''o'', chr(195).chr(179) => ''o'', chr(195).chr(180) => ''o'', chr(195).chr(181) => ''o'', chr(195).chr(182) => ''o'', chr(195).chr(182) => ''o'', chr(195).chr(185) => ''u'', chr(195).chr(186) => ''u'', chr(195).chr(187) => ''u'', chr(195).chr(188) => ''u'', chr(195).chr(189) => ''y'', chr(195).chr(191) => ''y'', // Decompositions for Latin Extended-A chr(196).chr(128) => ''A'', chr(196).chr(129) => ''a'', chr(196).chr(130) => ''A'', chr(196).chr(131) => ''a'', chr(196).chr(132) => ''A'', chr(196).chr(133) => ''a'', chr(196).chr(134) => ''C'', chr(196).chr(135) => ''c'', chr(196).chr(136) => ''C'', chr(196).chr(137) => ''c'', chr(196).chr(138) => ''C'', chr(196).chr(139) => ''c'', chr(196).chr(140) => ''C'', chr(196).chr(141) => ''c'', chr(196).chr(142) => ''D'', chr(196).chr(143) => ''d'', chr(196).chr(144) => ''D'', chr(196).chr(145) => ''d'', chr(196).chr(146) => ''E'', chr(196).chr(147) => ''e'', chr(196).chr(148) => ''E'', chr(196).chr(149) => ''e'', chr(196).chr(150) => ''E'', chr(196).chr(151) => ''e'', chr(196).chr(152) => ''E'', chr(196).chr(153) => ''e'', chr(196).chr(154) => ''E'', chr(196).chr(155) => ''e'', chr(196).chr(156) => ''G'', chr(196).chr(157) => ''g'', chr(196).chr(158) => ''G'', chr(196).chr(159) => ''g'', chr(196).chr(160) => ''G'', chr(196).chr(161) => ''g'', chr(196).chr(162) => ''G'', chr(196).chr(163) => ''g'', chr(196).chr(164) => ''H'', chr(196).chr(165) => ''h'', chr(196).chr(166) => ''H'', chr(196).chr(167) => ''h'', chr(196).chr(168) => ''I'', chr(196).chr(169) => ''i'', chr(196).chr(170) => ''I'', chr(196).chr(171) => ''i'', chr(196).chr(172) => ''I'', chr(196).chr(173) => ''i'', chr(196).chr(174) => ''I'', chr(196).chr(175) => ''i'', chr(196).chr(176) => ''I'', chr(196).chr(177) => ''i'', chr(196).chr(178) => ''IJ'',chr(196).chr(179) => ''ij'', chr(196).chr(180) => ''J'', chr(196).chr(181) => ''j'', chr(196).chr(182) => ''K'', chr(196).chr(183) => ''k'', chr(196).chr(184) => ''k'', chr(196).chr(185) => ''L'', chr(196).chr(186) => ''l'', chr(196).chr(187) => ''L'', chr(196).chr(188) => ''l'', chr(196).chr(189) => ''L'', chr(196).chr(190) => ''l'', chr(196).chr(191) => ''L'', chr(197).chr(128) => ''l'', chr(197).chr(129) => ''L'', chr(197).chr(130) => ''l'', chr(197).chr(131) => ''N'', chr(197).chr(132) => ''n'', chr(197).chr(133) => ''N'', chr(197).chr(134) => ''n'', chr(197).chr(135) => ''N'', chr(197).chr(136) => ''n'', chr(197).chr(137) => ''N'', chr(197).chr(138) => ''n'', chr(197).chr(139) => ''N'', chr(197).chr(140) => ''O'', chr(197).chr(141) => ''o'', chr(197).chr(142) => ''O'', chr(197).chr(143) => ''o'', chr(197).chr(144) => ''O'', chr(197).chr(145) => ''o'', chr(197).chr(146) => ''OE'',chr(197).chr(147) => ''oe'', chr(197).chr(148) => ''R'',chr(197).chr(149) => ''r'', chr(197).chr(150) => ''R'',chr(197).chr(151) => ''r'', chr(197).chr(152) => ''R'',chr(197).chr(153) => ''r'', chr(197).chr(154) => ''S'',chr(197).chr(155) => ''s'', chr(197).chr(156) => ''S'',chr(197).chr(157) => ''s'', chr(197).chr(158) => ''S'',chr(197).chr(159) => ''s'', chr(197).chr(160) => ''S'', chr(197).chr(161) => ''s'', chr(197).chr(162) => ''T'', chr(197).chr(163) => ''t'', chr(197).chr(164) => ''T'', chr(197).chr(165) => ''t'', chr(197).chr(166) => ''T'', chr(197).chr(167) => ''t'', chr(197).chr(168) => ''U'', chr(197).chr(169) => ''u'', chr(197).chr(170) => ''U'', chr(197).chr(171) => ''u'', chr(197).chr(172) => ''U'', chr(197).chr(173) => ''u'', chr(197).chr(174) => ''U'', chr(197).chr(175) => ''u'', chr(197).chr(176) => ''U'', chr(197).chr(177) => ''u'', chr(197).chr(178) => ''U'', chr(197).chr(179) => ''u'', chr(197).chr(180) => ''W'', chr(197).chr(181) => ''w'', chr(197).chr(182) => ''Y'', chr(197).chr(183) => ''y'', chr(197).chr(184) => ''Y'', chr(197).chr(185) => ''Z'', chr(197).chr(186) => ''z'', chr(197).chr(187) => ''Z'', chr(197).chr(188) => ''z'', chr(197).chr(189) => ''Z'', chr(197).chr(190) => ''z'', chr(197).chr(191) => ''s'', // Euro Sign chr(226).chr(130).chr(172) => ''E'', // GBP (Pound) Sign chr(194).chr(163) => ''''); $string = strtr($string, $chars); } else { // Assume ISO-8859-1 if not UTF-8 $chars[''in''] = chr(128).chr(131).chr(138).chr(142).chr(154).chr(158) .chr(159).chr(162).chr(165).chr(181).chr(192).chr(193).chr(194) .chr(195).chr(196).chr(197).chr(199).chr(200).chr(201).chr(202) .chr(203).chr(204).chr(205).chr(206).chr(207).chr(209).chr(210) .chr(211).chr(212).chr(213).chr(214).chr(216).chr(217).chr(218) .chr(219).chr(220).chr(221).chr(224).chr(225).chr(226).chr(227) .chr(228).chr(229).chr(231).chr(232).chr(233).chr(234).chr(235) .chr(236).chr(237).chr(238).chr(239).chr(241).chr(242).chr(243) .chr(244).chr(245).chr(246).chr(248).chr(249).chr(250).chr(251) .chr(252).chr(253).chr(255); $chars[''out''] = "EfSZszYcYuAAAAAACEEEEIIIINOOOOOOUUUUYaaaaaaceeeeiiiinoooooouuuuyy"; $string = strtr($string, $chars[''in''], $chars[''out'']); $double_chars[''in''] = array(chr(140), chr(156), chr(198), chr(208), chr(222), chr(223), chr(230), chr(240), chr(254)); $double_chars[''out''] = array(''OE'', ''oe'', ''AE'', ''DH'', ''TH'', ''ss'', ''ae'', ''dh'', ''th''); $string = str_replace($double_chars[''in''], $double_chars[''out''], $string); } return $string; } $str = "ľ š č ť ž ý á í é Č Á Ž Ý"; echo remove_accents($str); // Output: l s c t z y a i e C A Z Y ?>


Si tiene http://php.net/manual/en/book.intl.php disponible, puede usar esto:

$string = "Fóø Bår"; $transliterator = Transliterator::createFromRules('':: Any-Latin; :: Latin-ASCII; :: NFD; :: [:Nonspacing Mark:] Remove; :: Lower(); :: NFC;'', Transliterator::FORWARD); echo $normalized = $transliterator->transliterate($string);


Tuve el mismo problema con los personajes romainianos. En caso de que desee mantener los caracteres como están y guardarlos en una base de datos como mysql, use el código de caracteres especiales html. De lo contrario, si su objetivo es la segunda matriz, use este código:

function diac($text) { $diac = array(''ľ'',''š'',''č'',''ť'',''ž'',''ý'',''á'',''í'',''é'',''Č'',''Á'',''Ž'',''Ý''); $cor = array(''l'',''s'',''c'',''t'',''z'',''y'',''a'' ,''i'' ,''e'', ''C'' ,''A'', ''Z'', ''Y''); $text = str_replace($diac,$cor,$text); return $text; };


$table = array( '' ''=>''-'', ''Š''=>''S'', ''š''=>''s'', ''Ð''=>''Dj'', ''Ž''=>''Z'', ''ž''=>''z'', ''C''=>''C'', ''c''=>''c'', ''C''=>''C'', ''c''=>''c'', ''À''=>''A'', ''Á''=>''A'', ''Â''=>''A'', ''Ã''=>''A'', ''Ä''=>''A'', ''Å''=>''A'', ''Æ''=>''A'', ''Ç''=>''C'', ''È''=>''E'', ''É''=>''E'', ''Ê''=>''E'', ''Ë''=>''E'', ''Ì''=>''I'', ''Í''=>''I'', ''Î''=>''I'', ''Ï''=>''I'', ''Ñ''=>''N'', ''Ò''=>''O'', ''Ó''=>''O'', ''Ô''=>''O'', ''Õ''=>''O'', ''Ö''=>''O'', ''Ø''=>''O'', ''Ù''=>''U'', ''Ú''=>''U'', ''Û''=>''U'', ''Ü''=>''U'', ''Ý''=>''Y'', ''Þ''=>''B'', ''ß''=>''Ss'', ''à''=>''a'', ''á''=>''a'', ''â''=>''a'', ''ã''=>''a'', ''ä''=>''a'', ''å''=>''a'', ''æ''=>''a'', ''ç''=>''c'', ''è''=>''e'', ''é''=>''e'', ''ê''=>''e'', ''ë''=>''e'', ''ì''=>''i'', ''í''=>''i'', ''î''=>''i'', ''ï''=>''i'', ''ð''=>''o'', ''ñ''=>''n'', ''ò''=>''o'', ''ó''=>''o'', ''ô''=>''o'', ''õ''=>''o'', ''ö''=>''o'', ''ø''=>''o'', ''ù''=>''u'', ''ú''=>''u'', ''û''=>''u'', ''ý''=>''y'', ''ý''=>''y'', ''þ''=>''b'', ''ÿ''=>''y'', ''R''=>''R'', ''r''=>''r'', "''"=>''-'', ''"''=>''-'' ); $string = strtr($url, $table);


preg_replace(''/&([a-z]{1,2})(acute|cedil|circ|grave|lig|orn|ring|slash|th|tilde|uml|caron);/i'',''$1'',htmlentities($value));