Eu tenho um script PHP que lida com uma grande variedade de idiomas. Infelizmente, sempre que tento usar json_encode
, qualquer saída Unicode é convertida em entidades hexadecimais. Este é o comportamento esperado? Existe alguma maneira de converter a saída em caracteres UTF-8?
Aqui está um exemplo do que estou vendo:
ENTRADA
echo $text;
RESULTADO
База данни грешка.
ENTRADA
json_encode($text);
RESULTADO
"\u0411\u0430\u0437\u0430 \u0434\u0430\u043d\u043d\u0438 \u0433\u0440\u0435\u0448\u043a\u0430."
JSON_UNESCAPED_UNICODE está disponível no PHP Versão 5.4 ou posterior.
O código a seguir é para a versão 5.3.
ATUALIZADA
html_entity_decode
é um pouco mais eficiente quepack
+mb_convert_encoding
.(*SKIP)(*FAIL)
pula barras invertidas e caracteres especificados porJSON_HEX_*
sinalizadores.fonte
\\
. A versão mais recente agarra\\
prioridade mais alta que\u
.Você deseja definir charset e unicode sem escape
fonte
Uma solução é primeiro codificar os dados e depois decodificá-los no mesmo arquivo:
fonte
Aqui está minha solução combinada para várias versões do PHP.
Na minha empresa, estamos trabalhando com diferentes servidores com várias versões do PHP, então tive que encontrar uma solução que funcionasse para todos.
Os créditos devem ir para Marco Gasi e Abu . A solução para PHP> = 5.4 é fornecida nos documentos json_encode.
fonte
A função raw_json_encode () acima não me resolveu o problema (por algum motivo, a função de retorno de chamada gerou um erro no meu servidor PHP 5.2.5).
Mas essa outra solução realmente funcionou.
https://www.experts-exchange.com/questions/28628085/json-encode-fails-with-special-characters.html
Os créditos devem ir para Marco Gasi . Eu apenas chamo sua função em vez de chamar json_encode ():
fonte
fonte
Desde que você perguntou:
Outra solução é usar utf8_encode .
Isso codificará sua string para
UTF-8
.por exemplo
fonte
o
json_encode()
único funciona com dados codificados em UTF-8.talvez você possa obter uma resposta para convertê-lo aqui: cirílico-caracteres-em-phps-json-encode
fonte