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

peon

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

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

это нет в спеках по которым реализован json_decode?
есть ли стандартное решение?
 

peon

Lok'tar ogar
Нашел такое решение
Код:
$json = preg_replace_callback(
  "(\\\\x([0-9a-f]{2}))i",
  function($a) {
      $chr = chr(hexdec($a[1]));
      return $chr;
  },
  $json
);
 

Hello

Новичок
peon, т.к. у тебя не валидный json. Необходимо экранировать слеш
 

Вурдалак

Продвинутый новичок
— Строка «{"1": "hi\x21"}» не является валидной с точки зрения JSON.
— Как? Типографские кавычки же.

Но вообще кажется строка была для JavaScript, там такой синтаксис есть, в JSON же такого нет, только \u0000.
 

peon

Lok'tar ogar
peon, т.к. у тебя не валидный json. Необходимо экранировать слеш
а зачем мне экранировать слешь то предлагали тогда? если как ниже писали не по json такая эскейп последовательность. но по каким соображением в движке javascript это реализовано, если не по спекам
 

fixxxer

К.О.
Партнер клуба
PHP:
php > $json = '{"1": "hi\x21"}';
php > var_dump(yaml_parse($json));
array(1) {
  [1]=>
  string(3) "hi!"
}
 

флоппик

promotor fidei
Команда форума
Партнер клуба
Hello, я предполагаю, он хочет туда байт c шестнадцатиричным значением 21 вставить, а не текст \x21.
 
Сверху