[PHP] Note : substr et UTF-8
lundi 3 août 2015 à 20:07le hollandais volant
Substr vous fait chier avec les caractères unicode ?
Genre
Vous sort respectivement ao� et fé ?
C’est parce que les caractères unicodes font 1 octet partout, sauf là ils ne font pas partie des caractères de base (ascii).
Solution : déclarer un peu plus tôt dans le code :
Puis utiliser mb_substr(), qui s’utilise exactement comme substr() :
Vous sortiront respectivement aoû et fév.
« mb » signifie « multi-bytes » signifiant bien que c’est pour les caractères multi-octets de l’UTF-8.
Autrement, si mb_encoding n’est pas disponible, vous pouvez transformer le texte en version non accentuée avec ça :
Et le tour est joué plus de problèmes d’encodage :D
Substr vous fait chier avec les caractères unicode ?
Genre
substr('août', 0, 3) substr('février', 0, 3)
Vous sort respectivement ao� et fé ?
C’est parce que les caractères unicodes font 1 octet partout, sauf là ils ne font pas partie des caractères de base (ascii).
Solution : 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.
« mb » signifie « multi-bytes » signifiant bien que c’est pour les caractères multi-octets de l’UTF-8.
Autrement, si mb_encoding n’est pas disponible, vous pouvez transformer le texte en version non accentuée avec ça :
preg_replace('#&(.)(acute|grave|circ|uml|cedil|tilde|ring|slash|caron);#', '$1', $mots).
Et le tour est joué plus de problèmes d’encodage :D