Misanthropist
@Misanthropist
Web-developer

Как решить проблему вырезания слешей в json_encode?

Есть массив вида
array(
   "name"=>"Сулаймон",
   "custom"=> array(
        array(
          "name":"country",
          "content":"Узбекистан"
        ),
        array(
           "name":"last_date",
            "content":"2015-09-15"
        )
    )
)


после json_encode получаю что-то типа
{"name":"u043cu0438u0445u0430u0438u043b","custom":[{"name":"country","content":"u0422u0438u0440u0430u0441u043fu043eu043bu044c"},{"name":"last_date","content":"2015-09-15"}]}


Кто-нить сталкивался с таким? Как решить?

ЗЫ: Кроме подстановки флага JSON_UNESCAPED_UNICODE . И в сторонние библиотеки не очень хочется лезть.

ЗЫЫ: версии
Linux bla-blabla 3.2.0-4-amd64 #1 SMP Debian 3.2.63-2+deb7u1 x86_64
PHP Version 5.6.6-2
json version 1.3.6
JSON-C headers version 0.11.99
JSON-C library version 0.11.99
  • Вопрос задан
  • 202 просмотра
Решения вопроса 1
Misanthropist
@Misanthropist Автор вопроса
Web-developer
В общем так:
1. При проблеме с кодированием: у функции json_encode() вторым параметром можно передать флаг JSON_UNESCAPED_UNICODE. Тогда не ANSI-символы не переводятся в коды. Только необходимо следить чтобы вся работа с данными велась в UTF-8.
2. Есть похожая проблема при работе с PDO: если использовать подготовленные запросы, и запрос формировать с уже вставленными данными, а не через bind() - то PDO фильтрует текст запроса и удаляет слеши. Если делать как положено для подготовленных запросов - через bind() - тогда слеши остаются как есть.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
miraage
@miraage
Старый прогер
Держу пари, у Вас старый PHP/libjson/etc.

Kubuntu 14.04
PHP 5.6.12-1+deb.sury.org~trusty+1 (cli)

$x = array(
    "name" => "Сулаймон",
    "custom" => array(
        array(
            "name" => "country",
            "content" => "Узбекистан",
        ),
        array(
            "name" => "last_date",
            "content" => "2015-09-15",
        ),
    ),
);

echo json_encode($x);

// {"name":"\u0421\u0443\u043b\u0430\u0439\u043c\u043e\u043d","custom":[{"name":"country","content":"\u0423\u0437\u0431\u0435\u043a\u0438\u0441\u0442\u0430\u043d"},{"name":"last_date","content":"2015-09-15"}]}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
28 нояб. 2024, в 11:20
50000 руб./за проект
28 нояб. 2024, в 10:57
50000 руб./за проект
28 нояб. 2024, в 10:52
10000 руб./за проект