Existe uma função no PHP que pode decodificar sequências de escape Unicode como " \u00ed
" para " í
" e todas as outras ocorrências semelhantes?
Encontrei uma pergunta semelhante aqui, mas não parece funcionar.
Experimente isto:
$str = preg_replace_callback('/\\\\u([0-9a-fA-F]{4})/', function ($match) {
return mb_convert_encoding(pack('H*', $match[1]), 'UTF-8', 'UCS-2BE');
}, $str);
No caso de ser C / C ++ / Java / estilo Json baseado em UTF-16:
$str = preg_replace_callback('/\\\\u([0-9a-fA-F]{4})/', function ($match) {
return mb_convert_encoding(pack('H*', $match[1]), 'UTF-8', 'UTF-16BE');
}, $str);
\u
seguida por quatro dígitos hexadecimais.fonte
json_decode('"' . $text . '"')
json_decode('{"t":"\uD83D\uDE0A"}')
é 😊$text
pode incluir aspas duplas. Assim, uma versão revisada seria:json_decode('"'.str_replace('"', '\\"', $text).'"')
. Obrigado pela sua ajuda :-)PHP 7
A partir do PHP 7, você pode usar a sintaxe de escape do ponto de código Unicode para fazer isso.
echo "\u{00ed}";
saídasí
.fonte
fonte
😍
Esta é uma abordagem violenta para substituir UNICODE bruto por HTML. Não vi nenhum outro lugar para colocar essa solução, mas presumo que outros já tenham tido esse problema.
Aplique esta função str_replace ao RAW JSON , antes de fazer qualquer outra coisa.
Isso não vai demorar tanto quanto você pensa e vai substituir QUALQUER unicode por HTML.
É claro que isso pode ser reduzido se você conhecer os tipos Unicode que estão sendo retornados no JSON.
Por exemplo, meu código estava recebendo muitas setas e unicode dingbat. Eles estão entre 8448 e 11263. Portanto, meu código de produção se parece com:
Você pode pesquisar os blocos de Unicode por tipo aqui: http://unicode-table.com/en/ Se você sabe que está traduzindo árabe ou telegu ou qualquer outra coisa, pode apenas substituir esses códigos, não todos os 65.000.
Você pode aplicar esta mesma marreta à codificação simples:
fonte
Também existe uma solução:
http://www.welefen.com/php-unicode-to-utf8.html
fonte
corrigir valores json, é adicionado \ antes de u {xxx} a todos + ""
fonte