1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| echo mb_internal_encoding(), "\n\n\n";
/* premier test: on convertit en ISO-8859-1 pour produire des séquences UTF-8 invalides.
Bien entendu, comme mb_internal_encoding est UTF-8, c'est dans cette encodage que
mb_strlen va tenter de les lire.
On remarque l'incohérence des résultats pour PHP < 8.3, résultats qui dépendent de la
localisation du caractère  dans la chaîne.
*/
$test1 = [ 'mAm', 'mÂ', 'mÂm', 'mÂÂm' ];
echo "test 1:\n\n";
foreach ($test1 as $s) {
printf(
"%s:\n UTF-8: %d ISO-8859-1: %d\n",
$s,
mb_strlen($s),
mb_strlen(mb_convert_encoding($s, 'ISO-8859-1', 'UTF-8'))
);
}
echo "\n\n\n";
/* ici on teste le caractère U+2030 e2 80 b0 PER MILLE SIGN, on interrompt sa séquence et
on essaie différents cas de figure pour la suite.
*/
$test2 = ["\xe2\x80\xb0", "\xe2\x80", "\xe2\x80L", "\xe2\x80\xe2\x80", "\xe2\x80LL"];
echo "test 2:\n\n";
foreach ($test2 as $s) {
printf(
"%s: UTF-8: %d\n",
$s,
mb_strlen($s)
);
} |
Partager