una sustituir str_replace rtrim reemplazar parte espacios eliminar caracter cadenas cadena buscar blanco php utf-8 diacritics strtr

sustituir - PHP: Reemplazar diéresis con el equivalente ASCII de 7 bits más cercano en una cadena UTF-8



substr php (7)

De acuerdo, encontré una solución obvia, pero no es la mejor en cuanto a rendimiento ...

echo strtr(utf8_decode($input), utf8_decode(''ŠŒŽšœžŸ¥µÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýÿ''), ''SOZsozYYuAAAAAAACEEEEIIIIDNOOOOOOUUUUYsaaaaaaaceeeeiiiionoooooouuuuyy'');

Lo que quiero hacer es eliminar todos los acentos y diéresis de una cadena, convirtiendo "lärm" en "larm" o "andré" en "andre". Lo que traté de hacer fue utf8_decode la cadena y luego uso strtr en ella, pero como mi archivo fuente está guardado como un archivo UTF-8, no puedo ingresar los caracteres ISO-8859-15 para todas las diéresis: el editor inserta el Caracteres UTF-8.

Obviamente, una solución para esto sería incluir un archivo ISO-8859-15, pero debe haber una forma mejor que incluir otro requerido.

echo strtr(utf8_decode($input), ''ŠŒŽšœžŸ¥µÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýÿ'', ''SOZsozYYuAAAAAAACEEEEIIIIDNOOOOOOUUUUYsaaaaaaaceeeeiiiionoooooouuuuyy'');

ACTUALIZACIÓN: Tal vez fui un poco inexacto con lo que trato de hacer: en realidad no quiero quitar las diéresis, sino reemplazarlas por el equivalente "de un carácter ASCII" más cercano.


Descubrí que este ofrece los resultados más consistentes en francés y alemán. con la metaetiqueta establecida en utf-8 , la he colocado en una función para devolver una línea de una matriz de palabras y funciona perfectamente.

htmlentities ( $line, ENT_SUBSTITUTE , ''utf-8'' )


Para los usuarios de árabe y persa, recomiendo esta forma de eliminar signos diacríticos:

$diacritics = array(''َ'',''ِ'',''ً'',''ٌ'',''ٍ'',''ّ'',''ْ'',''ـ''); $search_txt = str_replace($diacritics, '''', $diacritics);

Para escribir signos diacríticos en teclados árabes, puede utilizar estos códigos Asci (esos códigos son Asci no Unicode) en los editores de Windows escribiendo diacríticos directamente o manteniendo presionado Alt + (escriba el código de carácter diacrítico) Estos son los códigos

(0243) (0246) (0245) (0240) (0242) (0241) (0250) (0248) (0220)



Un pequeño truco que no requiere establecer configuraciones regionales o tener enormes tablas de traducción:

function Unaccent($string) { if (strpos($string = htmlentities($string, ENT_QUOTES, ''UTF-8''), ''&'') !== false) { $string = html_entity_decode(preg_replace(''~&([a-z]{1,2})(?:acute|cedil|circ|grave|lig|orn|ring|slash|tilde|uml);~i'', ''$1'', $string), ENT_QUOTES, ''UTF-8''); } return $string; }

El único requisito para que funcione correctamente es guardar sus archivos en UTF-8 (como debería hacerlo).


también puedes probar 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);

pero necesita tener http://php.net/manual/en/book.intl.php disponible


iconv("utf-8","ascii//TRANSLIT",$input);

example extendido