<?php
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)
);
}