8796 sujets

Développement web côté serveur, CMS

Bonjour,

Je galère depuis plusieurs heures avec la fonction str_replace.

Je parse un flux xml en utf-8, mon site est en utf-8 (module mbstring)

Je fais ceci


$car_speciaux = array( 'À','Á','Â','Ã','Ä','Å','Æ','à','á','â','ã','ä','å','æ','È','É','Ê','Ë','è','é','ê','ë','Ì','Í','Î','Ï','ì','í','î','ï','Ò','Ó','Ô','Õ','Ö','Ø','ò','ó','ô','õ','ö','ø','Ù','Ú','Û','Ü','ù','ú','û','ü','ß','Ç','ç','Ð','ð','Ñ','ñ','Þ','þ','Ý','œ','\'','','(',')','+',':','/',' ','@','&','%','?','*',':',';','"','#','<','>',',');
	
$car_normaux  = array( 'A','A','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','O','O','O','O','O','O','o','o','o','o','o','o','U','U','U','U','u','u','u','u','B','C','c','D','d','N','n','P','p','Y','oe','-','-','-','-','-','-','-','-','-','et','','-','-','-','-','','-','-','-','-');

$rubrique = str_replace ($car_speciaux, $car_normaux, $rubrique);


Voici ce que j'obtiens:
Avant: Mode, santé & beauté
Après: mode-santa-et-beauta

Avant: bébé
Après: baba

Avant: garçon
Après: garaon

En gros il me remplace toutes les lettres accentué par un a !!!

Quelqu'un voit-il où est le probléme ?
Je pense que cela viens de l'utf-8 mais je ne vois pas comment y remedier.

Merci d'avance.
Modifié par yann123 (24 Jul 2009 - 15:47)
Il n'y a pas l'air d'y avoir d'erreur...

Essais strtr() peut-être :
$addr = strtr($addr, "äåö", "aao");
Salut,

moust a écrit :
Essais strtr() peut-être :
$addr = strtr($addr, "äåö", "aao");
Il y a de grandes chances que ça ne fonctionne pas en utf8. Smiley cligne

Voir ce sujet.

@yann123 > je ne vois pas d'où vient le problème mais quelques pistes :
* as-tu essayé de faire un var_dump sur tes variables (notamment $rubrique) pour vérifier ce qu'elles contiennent réellement avant le str_replace ?
* es-tu bien sûr que tout est bien encodé en utf8 tout au long du processus (je pense par exemple à un include de cette fonction dont le document serait en iso) ?
* peut-être un htmlentities ou un htmlspecialchars qui traîne ?