Article mis à jour le : 05-05-2022
Comment éviter le piège strlen de PHPC'est un petit (gros) piège qui passe souvent inaperçu. Juqu'au jour où... (les fameux schrodinbugs, désolé pour l'orthographe)
Venant en au fait. Beaucoup de codeurs en PHP vont utiliser la fonction strlen() pour mesurer la longueur d'une chaîne. Prenons l'exemple d'un script PHP, brut, sans rien d'autre que ceci:
Jusque là, rien d'anormal. Maintenant, essayons ceci:
Et oui! La fonction strlen() affiche la longueur en octets! Par en caractères! Ainsi, si un caractère est codé sur deux octets, un problème va se poser!
Pour éviter ceci, il faut utiliser la méthode mb_strlen().
Il y a à présent deux cas de figure :
1) Vous connaissez le charset défini dans votre code, par exemple avec cette méthode :
vous aurez juste à faire ceci :
2) Vous ne connaissez pas le charset, il faut donc le détecter avec la méthode mb_detect_encoding()
Et vouala!
NB : ne faites pas l'erreur de croire que d'utiliser la fonction header() vous protègera des problèmes. Pour rappel, celle-ci envoi un header au navigateur client, elle n'influe pas sur votre script!
NB2 : A partir de PHP 5.6, UTF-8 est utilisé par défaut!