Problema com diacrítica e mb_substr
Pergunta
Estou cortando string unicode com diacríticos usando mb_substr
função, mas funciona como eu usaria simples substr
função. Ele divide os caracteres Unicode ao meio exibindo diamante marcado com perguntas.
Por exemplo
echo mb_substr('ááááá', 0, 5); //Displays áá�
O que pode estar errado?
Solução
Eu tenho o mesmo problema se não especificar a codificação como o último parâmetro para mb_substr
: ele padrão, pelo menos no meu servidor, para ISO-8859-1
.
Mas, se eu definir a codificação corretamente, para UTF-8
, funciona bem:
echo mb_substr('ááááá', 0, 5, 'UTF-8');
Obtém a tela certa no navegador:
ááááá
Ver mb_substr
(citando, ênfase meu) :
string mb_substr ( string $str , int $start [,
int $length [, string $encoding ]] )
o
encoding
Parâmetro é a codificação do caractere. Se for omitido, o valor interno de codificação de caráter será usado.
Outras dicas
Eu tive o mesmo problema e as respostas acima me ajudaram. Ao lado da configuração php.ini
ou usando ini_set()
, também pode ajudar a usar mb_internal_encoding('utf-8');
(utf-8
pode ser substituído por sua escolha) para definir a codificação permanente para funções multibyte.