Annonce ToutSurTout

Bienvenue sur toutsurtout.biz

Radio TST

Si vous souhaitez participer vous aussi aux discussions sur le forum, il faut vous inscrire ou vous identifier.

Le Thème TST Printemps est maintenant en place.

Les inscriptions sont actuellement OUVERTES.

Message 1 Discussion postée le 03-08-2015 à 22:43:04

Philippe
Avatar de Philippe


Titre: Banni
Avancement: Niveau 3
Date d'inscription: 26-09-2009
Messages: 3 665

[PHP] Note : substr et UTF-8

Substr vous fait chier avec les caractères unicode ?

Genre

substr('août', 0, 3)
substr('février', 0, 3)


Vous sortent respectivement ao� et fé ?

C'est parce que les caractères Unicode font 1 octet partout, sauf là ils ne font pas partie des caractères de base (ascii). Le « fé » correspond donc à 1+2 = 3 octets et le « aoû » correspond à 4 octets, où en fait 3 octets correspondent à 2,5 lettres, d'où l'erreur.

Solution : utiliser la version « multi-bytes » (mb_) des fonctions de traitement de texte de PHP. Il faut déclarer un peu plus tôt dans le code :

mb_internal_encoding('UTF-8');



Puis utiliser mb_substr(), qui s'utilise exactement comme substr() :

mb_substr('août', 0, 3)
mb_substr('février', 0, 3)



Vous sortiront respectivement aoû et fév.

Autrement, si mb_encoding n'est pas disponible, vous pouvez toujours transformer le texte en version non accentuée avec ça (le $text doit être converti de UTF8 en ISO avant) :

preg_replace('#&(.)(acute|grave|circ|uml|cedil|tilde|ring|slash|caron);#', '$1', $text)

.


Et le tour est joué plus de problèmes d'encodage :D


https://www.world-lolo.com/images/uploads/image.num1445754529.of.world-lolo.com.jpg
Des stades aux entrées payantes sont pleins de gens qui pensent que ceux qu'ils applaudissent sont trop payés, et les bibliothèques à l'entrée gratuite sont vides des gens qui pensent que les livres sont trop chers ...
 

Message 2 Réponse postée le 03-08-2015 à 22:44:38

Loic
Avatar de Loic


Titre: Administrateur d'élite
Avancement: Niveau 5
Lieu: Avec Solenne
Date d'inscription: 26-09-2009
Messages: 104 650
Site web

Re: [PHP] Note : substr et UTF-8

Bon à savoir !


http://www.toutsurtout.biz/img/UserBarTST.gif
http://www.toutsurtout.biz/img/Sign-Loic.gif
Loic DL un jour, Loic DL toujours ...