@grechinaoleg

Как лечить экранирующий слеш в json php?

Доброго времени суток всем, кто сюда попал.

Пакую данные в json после парсинга, делаю htmlentities для каждого элемента массива, но именно "\" и именно с цифрой рядом ведет себя странно. Гуглил, не нагуглил.

Парсинг работает в больших объемах, впринципе можно и забить на этот кейс, но стало интересно.

$array = array("text" => htmlentities("Команда вышла в 1\4 финала"));
$json = json_encode($array, JSON_UNESCAPED_UNICODE);
$res	= json_decode($json, true);
print_r($res);


Результат:
5b4499e0804f8123987815.png
  • Вопрос задан
  • 2554 просмотра
Пригласить эксперта
Ответы на вопрос 3
SerafimArts
@SerafimArts
Senior Notepad Reader
Это именно та причина, по которой двойные кавычки использовать не стоит, нарваться можно и не на такие грабли, а потом 1000 лет отлаживать. Надеюсь, что этот опыт послужит вам хорошим уроком и в будущем позволит избежать подобных проблем. А заодно научит использовать IDE, где есть статический анализ и нормальная подсветка ;)

spoiler
5mn963wbx_tjjjlxoiinyncfve8.png


P.S. Ну и конечно стоит читать документацию: php.net/manual/ru/language.types.string.php
\[0-7]{1,3} последовательность символов, соответствующая регулярному выражению символа в восьмеричной системе счисления, который молча переполняется, чтобы поместиться в байт (т.е. "\400" === "\000")
Ответ написан
Комментировать
Stalker_RED
@Stalker_RED
Если посмотреть документацию по json_encode, то там есть дополнительные параметры
JSON_HEX_QUOT, JSON_HEX_TAG, JSON_HEX_AMP, JSON_HEX_APOS, JSON_NUMERIC_CHECK, JSON_PRETTY_PRINT, JSON_UNESCAPED_SLASHES, JSON_FORCE_OBJECT, JSON_PRESERVE_ZERO_FRACTION, JSON_UNESCAPED_UNICODE, JSON_PARTIAL_OUTPUT_ON_ERROR

php.net/manual/ru/json.constants.php
Подбирайте под вашу задачу.

UPD: Про escape-опследовательности: php.net/manual/ru/regexp.reference.escape.php
Ответ написан
Двойные кавычки я использую только когда мне нужны знаки табуляции и переноса строки. Обычно когда я что то записываю в файлики текстовые. В остальных случая я соглашусь с Кириллом Несмеяновым, по причине того что там могут быть переменные, которых в 99% там тупо нет. Следовательно, как то там их нужно php искать. Но мы то с вами знаем что там их нет.

А вообще вот это стоит почитать php.net/manual/ru/language.types.string.php

JSON я обычно вот так себе делаю и этого хватало мне.
$json = json_encode($str, JSON_UNESCAPED_UNICODE);
$array = json_decode($json, true);
php.net/manual/ru/function.json-encode.php
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы