Pull to refresh

Comments 5

Сразу скажу, что анонимные функции появились только в PHP 5.3 — а в PHP 5.2 в preg_replace_callback пришлось бы совать строку с именем функции, определённой где-то ещё.
Кстати, а разве функции json_encode и json_decode не взаимно обратимы?

И если они обратимы, то почему бы не использовать (для простоты дела) такое решение, при котором итоги работы json_encode, содержащие \uXXXX-последовательности, скармливаются в json_encode для обратного преобразования?

Я сейчас запустил вот такой тест:

<?php
header('Content-Type: application/json;charset=utf-8');

function prepareUTF8($matches){
   return json_decode('"'.$matches[1].'"');
}

echo preg_replace_callback('/((\\\u[01-9a-fA-F]{4})+)/', 'prepareUTF8',
   json_encode( "Самшит \xf0\x9f\x98\x81" )
);

Он выдал мне ту строку, которая от него, как я это понимаю, и требовалася. Со смайлом (единственным символом) на конце.

(Я не могу процитировать её тут: ломается Хабрахабр. Серьёзно.)
Опечатка.

Вместо «скармливаются в json_encode для обратного преобразования» следует читать «скармливаются в json_decode для обратного преобразования».
Остроумно, но ошибочно. Например, если на вход подать '\'"\\', то на выходе получим '"\'\\"\\\\"'.
Прошу прощения, похоже, я не прав и именно такой результат должен быть…
Sign up to leave a comment.

Articles