2016-04-15 3 views
2

у меня есть персидский текст "سرما"Php json_encode преобразует utf8 строку символов кодов

А потом, когда я преобразовать его в JSON с помощью json_encode(), я получаю серию сбежавших кодов символов, таких как \u0633, который, кажется, можно ожидать и рациональный процесс. Но мое замешательство заключается в том, что я не знаю, как преобразовать их обратно в читаемую строку символов. Как мне это сделать в PHP?

Должен ли я использовать что-либо из семейства mb_ *? Я также проверил параметры json_encode() и не нашел ничего подходящего для меня.

UPDATE что я спасаюсь в моей БД: [ «u0633u0631u0645u0627»]

Это показывает символы не экранирован. Хотя если я изменю его на ["\u0633\u0631\u0645\u0627"], его легко прочитать на json_decode()

+1

Не 'json_decode' делать то, что вы хотите? – Barmar

+0

Нет, это не так, просто отдайте их, как они есть. Я имею в виду с обозначением \ u * ... –

+0

Это работает для меня. Я возвращаю исходную строку с персидскими символами. – Barmar

ответ

2

Они должны быть преобразованы обратно на другой конец, когда он декодирован. Это самый безопасный вариант, поскольку было бы невозможно гарантировать, что передача или хранение не испортит многобайтную кодировку.

Если вы уверены, что все безопасно для UTF8 конца до конца вы можете сделать:

$res = json_encode($foo, \JSON_UNESCAPED_UNICODE); 

http://php.net/manual/en/function.json-encode.php

+0

Нет, это не решает проблему. –

+0

Проблема решена. Ваше решение сработало. –

+0

Вам еще нужно устранить проблему экранирования при хранении в БД. Если он не ускользает от обратных косых черт, он не ускользает от других специальных символов, поэтому вы можете использовать SQL-инъекцию. – Barmar

0

Может быть, попробовать кодирующий символы Unicode, а затем json_encoding его, а затем на другая сторона (принимающая JSON) декодирует json, а затем декодирует unicode.

Пример:

//Encode 
json_encode(utf8_encode($string)); 

//Decode 
utf8_decode(json_decode($string)); 
Смежные вопросы