strlen()
non gestisce correttamente i caratteri multibyte, poiché presuppone che 1 carattere sia uguale a 1 byte, che è semplicemente non valido per Unicode. Questo comportamento è documentato qui: http://php.net/strlen
strlen() restituisce il numero di byte piuttosto che il numero di caratteri in una stringa.
soluzione è quella di utilizzare mb_strlen()
funzione invece (mb
sta per multi byte
) (see mb_strlen() docs).
EDIT
Se per qualsiasi ragione il cambiamento nel codice non è possibile/fattibile, uno potrebbe voler garantire le funzioni di stringa vengono automaticamente sovraccarico da controparti multi-byte. Questo è supportato da PHP e documented here.
Si prega di notare che si potrebbe anche voler modificare il proprio php.ini
per assicurarsi che mb_string funzioni come si desidera. Le impostazioni disponibili sono documented here.
fonte
2013-04-05 08:51:25
Mi chiedo, qual è il punto specifico per separare le funzioni unicode/non-unicode? Perché non sempre usi le funzioni '(mb_)'? –
A breve: è perché il design PHP (come lingua) risucchia in molti punti e questo include anche il supporto UTF8. PHP non supportava codifiche multibyte internamente per anni, ed è per questo che è stata creata l'estensione multibyte. Puoi usare 'mb_' automaticamente da PHP usando l'overloading delle funzioni -> vedi http://php.net/manual/en/mbstring.overload.php ma questo dipende dalla configurazione di PHP, quindi a volte potrebbe essere meglio usare direttamente' mb_ 'Se non puoi assicurarti che sarà usato in altro modo. –
Grazie per le spiegazioni, amico mio, e soprattutto per indicare "sovraccarico", ho perso tutto questo ... Saluti! –