Problema con i segni diacritici e mb_substr
Domanda
sto affettando stringa unicode con segni diacritici che utilizzano la funzione mb_substr
ma funziona come userei semplice funzione substr
. Si divide i caratteri Unicode a metà la visualizzazione di domanda netta di diamante.
per es.
echo mb_substr('ááááá', 0, 5); //Displays áá�
Che cosa potrebbe essere sbagliato?
Soluzione
Ho lo stesso problema se non specificare la codifica come ultimo parametro a mb_substr
: il valore predefinito , almeno sul mio server, per ISO-8859-1
.
Ma, se ho impostato correttamente la codifica, per UTF-8
, funziona OK:
echo mb_substr('ááááá', 0, 5, 'UTF-8');
Ottiene il display di destra nel browser:
ááááá
Vedere mb_substr
(citando, sottolineatura mia) :
string mb_substr ( string $str , int $start [,
int $length [, string $encoding ]] )
Il parametro è
encoding
la codifica dei caratteri. Se si tratta omesso, carattere interno verrà utilizzato valore di codifica .
Altri suggerimenti
Ho avuto lo stesso problema e le risposte di cui sopra mi ha aiutato troppo. Accanto impostazione php.ini
o utilizzando ini_set()
, può anche aiutare a usare mb_internal_encoding('utf-8');
( utf-8
può essere sostituito a scelta) per impostare la codifica permanente per le funzioni più byte.