2730Fermer2732
MeowcateLe 12/04/2017 à 16:22
J'ai bloqué un moment avant de comprendre ce bug PHP. En faisant un substr (substring), en partant de la position 0 du string et demandant 25 caractères de long, je n'avais jamais le bon résultat.
En testant avec un strlen (string lenght), le texte demandé contient en fait 26 caractères.
Tout ça parce qu'il y a un "é".
Même un strtoupper (string to upper) ne peut mettre correctement les accents en majuscules.

Je n'y avais jamais fait attention avant : ces fonctions basiques de PHP ont été créées avant que PHP ne fonctionne à l'Unicode, donc le "é" en UTF-8 compte pour deux caractères.
Heureusement ces fonctions peuvent être précédées par le préfixe "mb_" (multiple bytes) pour fonctionner correctement avec l'unicode.
Mais quand même, des années à utiliser PHP et je n'avais encore jamais eu conscience de ça. Je dois sans doute trainer un ou deux petits bugs ponctuels dans des projets passés à cause de ça.

Je me demande si d'autres langages, avec l'unicode, ont adapté leurs fonctions. J'imagine que PHP est resté sur son approche habituelle : "si c'est cassé, ne pas réparer mais faire une nouvelle fonction, la rétrocompatibilité avant tout".