PHP et UTF-8

WRInaute accro
Bonjour,

Je travaille actuellement sur deux sites en UTF-8.

Le premier, pas de problème. Le second: une section est problématique au niveau de l'encodage.

J'y fais des manipulations sur des chaînes de caractères. Je constate que les caractères accentués passent mal avec strlen et strtolower, m'obligeant à recourir à mb_strlen et mb_strtolower. Pire, un accès au premier caractère d'une chaîne par $chaine[0] me retourne un caractère erroné, m'obligeant à utiliser mb_substr...

Pouvez-vous me dire si je m'y prends mal (par exemple: un paramètre de configuration PHP qui m'aurait échappé) ou si cette manière de procéder est normale?

D'avance, je vous remercie.
 
WRInaute occasionnel
Salut,

T'as réussi à localiser à cause de quoi cette section est problématique ? Par rapports aux autres ? C'est quoi son fonctionnement ? Inclusion d'un fichier (peut être encodé différemment) ? Récupération de données externes au site ?
En général utf8_encode() et assimilées sont tes amies dans ces cas la...
 
WRInaute discret
Ça me parait normal que tu doives utiliser les fonctions avec le préfixe mb_.

Les fonctions sans le mb_ travaillent sur des caractères à un ou deux octets (je ne me souviens plus), ce qui fait que quand tu les appliques sur de l'UTF-8 elles font n'importe quoi s'il y a des caractères faisant plus d'octets (3 ou 4) (ce qui est possible avec utf-8 mais pas en ISO-8859).

Je garantis pas l'explication, mais je crois que c'est ça l'idée :wink:
 
WRInaute impliqué
Le problème d'encodage peut venir de différentes sources. Par exemple, la source des données (est-ce qu'elles viennent de la base de donnée et est-ce que la base de donnée est en UTF-8 ?)

Il y a également le fichier script, est-ce qu'il est bien en UTF-8 Plain, cela peut jouer également.

Après finalement, il y a les fonctions PHP qui elles ne sont pas en UTF-8 et qui t'obligent effectivement à utiliser la librairie MB String. Mais avec PHP6 ça sera fini, UTF-8 en natif (enfin).

a++
 
Discussions similaires
Haut