Usa mb_strlen
Restituisce il numero di caratteri nella stringa str codifica dei caratteri avere (il secondo parametro) codifica. Un carattere multi-byte viene contato come 1.
Dal momento che i 3 personaggi sono tutti multi-byte, si ottiene 6 tornò con strlen
, ma questo torna 3
come previsto.
echo mb_strlen($string,'utf-8');
Fiddle
Nota
E 'importante non sottovalutare la potenza di questo metodo e alternative simili. Ad esempio si potrebbe essere inclini a dire ok se i caratteri sono multi-byte quindi ottenere la lunghezza con strlen
e dividerlo per 2 ma funzionerà solo se tutti i caratteri della stringa sono multi-byte e anche un periodo .
invaliderà il conteggio. Ad esempio questo
echo mb_strlen('علی.','utf-8');
Restituisce 4
che è corretto. Quindi questa funzione non solo prende l'intera lunghezza e la divide per 2, conta 1 per ogni carattere multi-byte e 1 per ogni carattere a byte singolo.
Nota 2:
Sembra che avete deciso di non utilizzare questo metodo perché mbstring
estensione non è abilitato per impostazione predefinita per le vecchie versioni di PHP e si potrebbe avere deciso di non provare le consente :) Per i lettori futuri però , non è difficile ed è consigliabile abilitarlo se si hanno a che fare con caratteri multi-byte in quanto non solo la lunghezza che potrebbe essere necessario gestire. See Manual
fonte
2014-09-01 06:31:31
Utilizzare ['mb_strlen()'] (http://php.net/mb-strlen) (dall'estensione MBString). – BlitZ
L'output è 6 perché 'strlen()' conta i byte senza considerare la codifica. Nella tua codifica (probabilmente UTF8) ogni personaggio conta come 2 byte. Quindi, l'output per 3 caratteri sarà = 6 ('3 caratteri * 2 byte '). – BlitZ
Ho eseguito 'var_dump (mb_strlen ('علی'));' me stesso, ma l'output è ancora 6? – bhargavg