2016-05-23 4 views
1

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

$data = '{"client":"Test @#€%&-+()\/\\_*\""}'; 
$data = json_decode($data); 
var_dump($data); die; 

Это возвращает NULL. Если я удалю \\, код будет работать. Я пробовал это в Google Dev Tools и работает в Javascript. Как я могу заставить его работать в json_decode?

Спасибо!

+0

В чем цель \ в этой строке? Чтобы убежать или иметь буквенный символ \ char? – AbraCadaver

+0

Использование \\\ или \\\\ будет успешно декодировать строку JSON, имеющую в ней буквенный символ обратной косой черты ('\\'). – lolbas

+0

@lolbas, уже пробовал, также возвратил null. На самом деле str_replace («\\\\», ...) фактически вообще не работало. AbraCadaver, извините, забыл упомянуть, что строка уже сбежала от отправителя (в данном случае, Android-устройства). Итак, \\ - буквальный символ. – Sagito

ответ

0

Проблема, с которой вы столкнулись с нулевым значением, вызвана из-за двойного экранирования: одна для строки PHP и одна для интерпретируемой позже json. Так, например, после добавления нескольких \ он ведет себя так:

php > $data = '{"client":"Test @#%&-+()\\/\\\\_*\""}'; 
var_dump(json_decode($data)); 
object(stdClass)#1 (1) { 
    ["client"]=> 
    string(18) "Test @#%&-+()/\_*"" 
} 

Вы можете поставить, а тестовый файл JSON в и прочитать ее, а потом вам не придется беспокоиться о побеге ничего, как PHP строку.

+0

Спасибо за ваш ответ! К сожалению, это генерируется непосредственно при вводе пользователем. Хотя этот случай был тестом, у нас было несколько проблем с «специальными символами» при получении данных на стороне PHP. Поскольку у меня нет контроля над входом, я должен найти решение на стороне сервера. – Sagito

Смежные вопросы