JS se pète les dents quand on peut split() une chaîne de caractères formés de caractères unicodes muti-octets :
'pizza🍕'.split(''); // [ 'p', 'i', 'z', 'z', 'a', '�', '�' ]
Il existe deux solutions :
// Using Spread
[...'pizza🍕']; // [ 'p', 'i', 'z', 'z', 'a', '🍕' ]
// Using Array.from
Array.from('pizza🍕'); // [ 'p', 'i', 'z', 'z', 'a', '🍕' ]
~
PHP aussi se casse les dents, mais il suffit de passer un flag à TRUE pour dire qu’on travaille en mutibyte, ou alors d’utiliser les fonctions mutibytes en « mb_ » :
mb_internal_encoding('UTF-8');
mb_substitute_character('none');
C’est utile quand on veut par exemple tronquer une chaîne à X caractères, et que parfois cette troncature se trouve au milieu d’un caractères. C’est ce qui casse parfois certains flux RSS qui tronquent leur contenu. On se retrouve alors avec un « � » dans le flux et les lecteurs RSS voient ça comme un flux pété.