Сегодня я столкнулся с этой сериализацией
gotcha . Из документа PHP.net:
Примечание: К частным членам объекта добавляется имя класса. имя; защищенные члены имеют перед именем члена "*". Эти добавленные значения имеют нулевых байта с обеих сторон .
Я использую debug_backtrace для создания трассировки для отчета об отладке, который получает json_encode
d. Внутри он использует сериализатор для генерации данных для трассировки.
Это (частичный) вывод json_encode
:
{"\u0000MyObject\u0000my_var":[]}
Проблема в том, что json_decode
не может обработайте это, он будет жаловаться на нулевые байты.
Итак json_encode
успешно записывает нулевые байты, которые json_decode
не может декодировать. Мне это кажется немного странным. Я ожидал, что json_encode
позаботится о необходимом экранировании, или, по крайней мере, json_decode
может анализировать все, что создано json_encode
, но это не похоже на case.
Думаю, у меня есть несколько решений:
json_encode
, чтобы он не производил нулевые байты json_decode
, чтобы он принимал нулевые байты Кто-нибудь сталкивался с этой проблемой и как вы это исправили?
Пример:
Решение
Начиная с PHP 5.3
call_user_func_array
выдаст предупреждение, когда второй параметрcall_user_func_array
не является массивом. А пока вам придется проверить это самостоятельно.