как исправить искаженный JSON в php - PullRequest
1 голос
/ 02 августа 2011

У меня есть эта строка JSON, которую я хочу декодировать с помощью функции json_decode();

{"phase":2,"id":"pagelet_profile_picture","css":["VCxcl","Ix2pq"],"js":["fZYUE","VfnZ3"],"content":{"pagelet_profile_picture":"\u003cdiv class=\"profile-picture\">\u003cspan class=\"profile-picture-overlay\">\u003c\/span>\u003cimg class=\"photo img\" src\=\"http:\/\/profile.ak.fbcdn.net\/hprofile-ak-snc4\/222_111_2222_n.jpg\" alt=\"bla bla\" id=\"profile_pic\" \/>\u003c\/div>"}}

, есть json_last_error();, но она мне не помогает.(иногда получает JSON_ERROR_STATE_MISMATCH и JSON_ERROR_SYNTAX)

Я хочу знать, что не так с этой строкой JSON и как я могу исправить ее автоматически в PHP, чтобы я мог ее декодировать.некоторый код будет очень полезен, спасибо.

Ответы [ 2 ]

2 голосов
/ 02 августа 2011

При использовании json lint кажется, что проблема в src \ =

знак \ избегает знака =, что не имеет смысла.

Если вы замените src \ = на src =, он пройдет валидатор.

Исправление:

  1. Исправить код, который генерирует строку json в первую очередь.

или

  1. используйте str_replace , чтобы изменить 'src \ =' на 'src ='
1 голос
/ 02 августа 2011

Проблема с неправильной кодировкой в ​​том, что это просто неправильная кодировка. Вещи тогда ломаются.

Если проблема связана с недопустимыми escape-последовательностями, как указал Бен в своем ответе, вы можете попытаться исправить входную строку для этих последовательностей, возможно, с помощью более интеллектуального алгоритма, который ищет любую ненужную escape-последовательность, заменяя ее на это не экранированное значение путем удаления символа экранирования \.

Вы можете сделать это, создав список символов, для которых требуется экранирование, затем проанализируйте всю строку для экранирующего символа, если он найден, проверьте, требует ли экранирование следующий символ, и затем выполните действия.

Однако это только одна стратегия, и поскольку входные данные не закодированы должным образом, не просто исправить вещи, потому что они уже сломаны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...