Ce que je veux faire est de supprimer tous les accents et les trémas d'une chaîne, en transformant "lärm" en "larm" ou "andré" en "andre". Ce que j’ai essayé de faire, c’est d’utf8_decoder la chaîne, puis d’utiliser strtr, mais comme mon fichier source est enregistré au format UTF-8, je ne peux pas saisir les caractères ISO-8859-15 pour tous les trémas - l’éditeur insère le Caractères UTF-8.
De toute évidence, une solution à ce problème consisterait à inclure un fichier ISO-8859-15, mais il doit exister un meilleur moyen que d’inclure un autre fichier include obligatoire?
echo strtr(utf8_decode($input),
'ŠŒŽšœžŸ¥µÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýÿ',
'SOZsozYYuAAAAAAACEEEEIIIIDNOOOOOOUUUUYsaaaaaaaceeeeiiiionoooooouuuuyy');
UPDATE: Peut-être étais-je un peu inexact avec ce que j'essaie de faire: je ne veux pas réellement supprimer les trémas, mais les remplacer par leur équivalent "un caractère ASCII" le plus proche.
iconv("utf-8","ascii//TRANSLIT",$input);
Extended exemple
Un petit truc qui ne nécessite pas de paramétrage de paramètres régionaux ni de tables de traduction volumineuses:
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 de sauvegarder vos fichiers au format UTF-8 (comme vous devriez déjà le faire).
vous pouvez aussi essayer ceci
$string = "Fóø Bår";
$transliterator = Transliterator::createFromRules(':: Any-Latin; :: Latin-ASCII; :: NFD; :: [:Nonspacing Mark:] Remove; :: Lower(); :: NFC;', Transliterator::FORWARD);
echo $normalized = $transliterator->transliterate($string);
mais vous devez avoir http://php.net/manual/fr/book.intl.php available
Ok, j'ai trouvé une solution évidente moi-même, mais ce n'est pas la meilleure en matière de performance ...
echo strtr(utf8_decode($input),
utf8_decode('ŠŒŽšœžŸ¥µÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýÿ'),
'SOZsozYYuAAAAAAACEEEEIIIIDNOOOOOOUUUUYsaaaaaaaceeeeiiiionoooooouuuuyy');
Pour les utilisateurs arabes et persans, je recommande cette méthode pour supprimer les signes diacritiques:
$diacritics = array('َ','ِ','ً','ٌ','ٍ','ّ','ْ','ـ');
$search_txt = str_replace($diacritics, '', $diacritics);
Vous pouvez utiliser ces codes Asci (ces codes sont des codes Asci et non Unicode) dans les éditeurs Windows Taper les signes diacritiques directement ou maintenir Alt + (saisir le code de caractère diacritique) Ce sont les codes
(0243) ـِ (0246) (0245) (0240) (0242) (0241) (0250) (0248) ـ (0220)
J'ai trouvé que celui-ci donne les résultats les plus cohérents en français et en allemand . Avec la balise méta définie sur utf-8
, je l'ai placé dans une fonction pour renvoyer une ligne d'un tableau de mots et cela fonctionne parfaitement.
htmlentities ( $line, ENT_SUBSTITUTE , 'utf-8' )
Si vous utilisez WordPress, vous pouvez utiliser la fonction intégrée remove_accents( $string )
https://codex.wordpress.org/Function_Reference/remove_accents
Cependant, j’ai remarqué un bug: cela ne fonctionne pas sur une chaîne avec un seul caractère.