Sto costruendo un'API per un'applicazione mobile e mi sembra di avere un problema nel conteggio della lunghezza di una stringa contenente emoji. Il mio codice:PHP - lunghezza della stringa che contiene emoji/caratteri speciali
$str = "✌️ @mention";
printf("strlen: %d" . PHP_EOL, strlen($str));
printf("mb_strlen UTF-8: %d" . PHP_EOL, mb_strlen($str, "UTF-8"));
printf("mb_strlen UTF-16: %d" . PHP_EOL, mb_strlen($str, "UTF-16"));
printf("iconv UTF-16: %d" . PHP_EOL, iconv_strlen(iconv("UTF-8", "UTF-16", $str)));
printf("iconv UTF-16: %d" . PHP_EOL, iconv_strlen(iconv("ISO-8859-1", "UTF-16", $str)));
la risposta di questo è:
strlen: 27
mb_strlen UTF-8: 14
mb_strlen UTF-16: 13
iconv UTF-16: 14
iconv UTF-16: 27
però dovrei ottenere 17 come risultato. Abbiamo provato a fissare la lunghezza della stringa su iOS, Android e Windows Phone, sono 17 ovunque. Snippet iOS (rapido):
var str = "✌️ @mention"
(str as NSString).length // 17
count(str) // 13
count(str.utf16) // 17
count(str.utf8) // 27
È necessario utilizzare NSString a causa di una libreria. Ho bisogno di questo per ottenere la posizione iniziale e finale di "@mention". Se la stringa contiene solo testo o solo emoji, funziona correttamente, quindi probabilmente c'è qualche problema con i contenuti misti.
Cosa sto sbagliando? Quali altre informazioni posso fornire a voi ragazzi per farmi nella giusta direzione?
Grazie!
provare a utilizzare mb_substr, mb_str lunghezza può essere un'opzione –