Problema con diacríticos y mb_substr
Pregunta
Estoy SLICING cadena Unicode con diacríticos utilizando la función mb_substr
pero funciona como me gustaría utilizar la función substr
sencilla. Se divide caracteres Unicode en la mitad mostrando pregunta marcada diamante.
por ejemplo.
echo mb_substr('ááááá', 0, 5); //Displays áá�
¿Qué podría estar mal?
Solución
Tengo el mismo problema si no se especifica la codificación como el último parámetro a mb_substr
: por defecto , al menos en mi servidor, a ISO-8859-1
.
Pero, si fijo la codificación adecuada, a UTF-8
, funciona bien:
echo mb_substr('ááááá', 0, 5, 'UTF-8');
Obtiene la pantalla derecha en el navegador:
ááááá
Ver mb_substr
(citando, el énfasis es mío)
string mb_substr ( string $str , int $start [,
int $length [, string $encoding ]] )
El parámetro
encoding
es la codificación de caracteres. Si se trata de omitido, el carácter interno se utilizará valor de codificación .
Otros consejos
Yo tenía el mismo problema y las respuestas anteriores me ayudó también. Junto a establecer php.ini
o usar ini_set()
, sino que también puede ayudar el uso de mb_internal_encoding('utf-8');
( utf-8
se puede reemplazar a su elección) para el establecimiento de codificación permanente para las funciones de varios bytes.