[PHP] substr() et UTF-8
Résolu
dimi3
Messages postés
278
Statut
Membre
-
dimi3 Messages postés 278 Statut Membre -
dimi3 Messages postés 278 Statut Membre -
Bonjour,
Afin de reconnaitre les lettres exotiques d'une entrée utilisateur dans un formulaire, je fais une boucle lisant un à un chacun des caractères de la chaine texte entrée :
$lettre = substr($entreeutilisateur,$i,1);
Puis je teste :
if ($lettre == " ĉ ") $lettre = "c";
Je m'aperçois que le test ne fonctionne pas. Le programme ne reconnaît pas les caractères recherchés.
Mon fichier PHP est pourtant sauvegardé avec l'encodage UTF-8.
A quoi cela pourrait-il être dû ?
Je vous remercie de votre avis.
Afin de reconnaitre les lettres exotiques d'une entrée utilisateur dans un formulaire, je fais une boucle lisant un à un chacun des caractères de la chaine texte entrée :
$lettre = substr($entreeutilisateur,$i,1);
Puis je teste :
if ($lettre == " ĉ ") $lettre = "c";
Je m'aperçois que le test ne fonctionne pas. Le programme ne reconnaît pas les caractères recherchés.
Mon fichier PHP est pourtant sauvegardé avec l'encodage UTF-8.
A quoi cela pourrait-il être dû ?
Je vous remercie de votre avis.
Configuration: Windows 7 / Safari 532.5
3 réponses
-
Bonjour
substr et strtr ne fonctionnent pas avec les chaînes en UTF8
Les fonctions standard du PHP travaillent sur la base 1 octet = 1 caractère, alors que l'utf8 peut utiliser plusieurs octets pour un seul caractère.
Pour travailler proprement avec l'utf8, il faut obligatoirement utiliser un bibliothèque comme mbstring (mb=multi byte)
https://www.php.net/manual/fr/book.mbstring.php -
Je n'ai pas d'idée pour le problème d'UTF8, par contre je te signale la fonction « strtr » qui fait déjà toute seule ce que tu fais lettre par lettre.
-
Merci à tous deux pour l'attention que vous avez portée à ma question.
Je ne connaissais pas cette bibliothèque "mbstring" qui a résolu parfaitement mes problèmes.
Mille mercis pour m'avoir tiré d'une galère de plusieurs jours.