51 votes

PHP: Remplacer les accents avec le plus proche 7-bit ASCII équivalent dans une chaîne UTF-8

Ce que je veux faire est de supprimer tous les accents et les trémas à partir d'une chaîne, en tournant "lärm" en "larm" ou "andré" en "andré". Ce que j'ai essayé de faire était de utf8_decode la chaîne et ensuite utiliser strtr sur elle, mais depuis que mon fichier source est enregistré en tant que fichier UTF-8, je ne peux pas entrer dans la norme ISO-8859-15 caractères pour tous les trémas - l'éditeur insère les caractères UTF-8.

Évidemment, une solution serait d'avoir un include c'est un ISO-8859-15 fichier, mais il doit y avoir une meilleure façon que d'avoir un autre requis?

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

Mise à JOUR: j'étais Peut-être un peu inexact avec ce que je cherche à faire: je n'ai pas réellement supprimer les accents, mais de les remplacer par leurs plus proches "d'un caractère ASCII" aequivalent.

59voto

Vinko Vrsalovic Points 116138
iconv("utf-8","ascii//TRANSLIT",$input);

Extended exemple

33voto

Alix Axel Points 63455

Un petit truc qui ne nécessite pas de réglage des paramètres régionaux ou d'avoir d'énormes tables de traduction:

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;
}

La seule condition pour que cela fonctionne correctement est d'enregistrer vos fichiers en UTF-8 (comme vous devez déjà le cas).

1voto

BlaM Points 10753

Ok, trouvé une solution évidente moi, mais ce n'est pas le meilleur sujet de la performance...

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X