PHP Multi Byte str_replace?
Je suis en train de faire accentués remplacement de caractères en PHP, mais obtenir funky résultats, je pense être parce que je suis en utilisant une chaîne UTF-8 et str_replace peut pas gérer correctement les multi-chaînes d'octets..
$accents_search = array('á','à','â','ã','ª','ä','å','Á','À','Â','Ã','Ä','é','è',
'ê','ë','É','È','Ê','Ë','í','ì','î','ï','Í','Ì','Î','Ï','œ','ò','ó','ô','õ','º','ø',
'Ø','Ó','Ò','Ô','Õ','ú','ù','û','Ú','Ù','Û','ç','Ç','Ñ','ñ');
$accents_replace = array('a','a','a','a','a','a','a','A','A','A','A','A','e','e',
'e','e','E','E','E','E','i','i','i','i','I','I','I','I','oe','o','o','o','o','o','o',
'O','O','O','O','O','u','u','u','U','U','U','c','C','N','n');
$str = str_replace($accents_search, $accents_replace, $str);
Résultats que j'obtiens:
Ørjan Nilsen -> �orjan Nilsen
Résultat Attendu:
Ørjan Nilsen -> Orjan Nilsen
Edit: j'ai mon caractère interne et gestionnaire de défini pour l'UTF-8 (selon mb_internal_encoding()), la valeur de $str est de l'UTF-8, donc à partir de ce que je peux dire, toutes les chaînes concernées sont en UTF-8. Ne str_replace() détection d'un char d'ensembles et de les utiliser correctement?
source d'informationauteur Ian
Vous devez vous connecter pour publier un commentaire.
Ressemble à la chaîne n'a pas été remplacé parce que votre encodage en entrée et le fichier d'encodage de la disparité.
Selon la documentation php str_replace fonction binaire-sûr, ce qui signifie qu'il peut gérer
UTF-8
format texte sans perte de données.Il est possible de supprimer les signes diacritiques à l'aide de La normalisation Unicode forme D (NFD) et les propriétés des caractères Unicode.
NFD convertit en quelque chose comme le "ü" tréma de "la LETTRE minuscule LATINE U TRÉMA" (qui est une lettre) pour "LETTRE minuscule LATINE U" (lettre) et la "COMBINAISON de la DIÉRÈSE" (une lettre).
De sortie:
Le Normalisateur de la classe fait partie de la PECL intl paquet. (L'algorithme lui-même n'est pas très compliqué, mais a besoin de charger beaucoup de caractère mappages autant que je sache. J'ai écrit un PHP de mise en œuvre il y a un moment.)
(Je suis en ajoutant ce de deux mois de retard parce que je pense que c'est une belle technique qui n'est pas connu assez largement.)
Essayer la définition de cette fonction: