Наткнулся на одну особенность в 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();.
В чём загвоздка? Это браузер, или сервер экранирует кавычки, или может это НЛО? Можно ли решить проблемы более естественным образом?