denysd
@denysd
Мимо проходящий

Откуда берутся экранирующие слэшы при отправке JSON в PHP?

Наткнулся на одну особенность в PHP.

Допустим мы хотим передать некие данные в json-формате на сервер с помощью метода GET. Для примера у нас есть данные:
var data = {
    "value1" : "key1",
    "value2" : "key2"
}

Отправляем их на сервер методом GET:
function doXHR (data) {
	var xhr = getXMLHttpRequest(),
            json = encodeURIComponent(JSON.stringify(data));
	xhr.open('GET', 'http://domain.com/?json=' + json, true);
	xhr.send();
	xhr.onreadystatechange = function (e) {
		console.log(e);
	};
}

Здесь начинается самое интересное. Когда мы попробуем обратиться к переменной на сервере то увидим, что перед каждой кавычкой появился экранирующий слэш, поэтому вполне логично, что декодирование вызовет ошибку:
print_r($_GET['json']);  // => {\"value1\":\"key\",\"value2\":\"key2\"}
print_r(json_decode($_GET['json'])); // => NULL
print_r(json_last_error()); // => 4

Из положения я вышел просто удалив все слэшы функцией stripcslashes();. но мне всё-таки интересно откуда появились экранирующие символы.
Из всего нашёл тему на ХэшКоде с подобной проблемой, но автор вышел из ситуации также удалив слэшы вручную функцией replace();.

В чём загвоздка? Это браузер, или сервер экранирует кавычки, или может это НЛО? Можно ли решить проблемы более естественным образом?
  • Вопрос задан
  • 3416 просмотров
Решения вопроса 1
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы