json_decode не парсит кодировку {"1": "hi\x21"}

  • Автор темы Автор темы peon
  • Дата начала Дата начала

peon

Lok'tar ogar
Код:
$json = '{"1": "hi\x21"}';
var_dump(json_decode($json)); //NULL


первое что не понятно, странная кодировка \x21
похожа на кодировку url %21 только вместо процента \x

это нет в спеках по которым реализован json_decode?
есть ли стандартное решение?
 
Нашел такое решение
Код:
$json = preg_replace_callback(
  "(\\\\x([0-9a-f]{2}))i",
  function($a) {
      $chr = chr(hexdec($a[1]));
      return $chr;
  },
  $json
);
 
— Строка «{"1": "hi\x21"}» не является валидной с точки зрения JSON.
— Как? Типографские кавычки же.

Но вообще кажется строка была для JavaScript, там такой синтаксис есть, в JSON же такого нет, только \u0000.
 
peon, т.к. у тебя не валидный json. Необходимо экранировать слеш
а зачем мне экранировать слешь то предлагали тогда? если как ниже писали не по json такая эскейп последовательность. но по каким соображением в движке javascript это реализовано, если не по спекам
 
PHP:
php > $json = '{"1": "hi\x21"}';
php > var_dump(yaml_parse($json));
array(1) {
  [1]=>
  string(3) "hi!"
}
 
Hello, я предполагаю, он хочет туда байт c шестнадцатиричным значением 21 вставить, а не текст \x21.
 
Сверху