我知道这已被问过几次,但请耐心等待。
我有一个相当复杂的谷歌地图对象(它包含各种节点,坐标等),我试图将其作为查询字符串传递。
我需要一个播放javascript / jQuery解决方案。
我尝试过.param方法,它会产生jQuery错误。唯一有效的是“stringify”方法,然后创建一个字符串,当它显示为url看起来有点像这样:%7B%5C“shape_1%5C”%3A%7B%5C“color%5C”%3A %5C “%237F0000%5C” %2C%5C “数据%5C” %3A%7B%5C “b%5C” %3A%5B%7B%5C “娜%5C” %3A51.56727431757122%2C%5C” OA%5C“%3A-0.10462402858888709%7D%2C ...
php将其翻译为: {\\ “shape_1 \\”:{\\ “颜色\\”:\\ “#7F0000 \\”,\\ “数据\\”:{\\ “B \\”:[{\\“娜\\ “:51.56727431757122,\\” OA \\“: - 0.10462402858888709},...
但是说我不想使用PHP,我只是告诉你它做了什么,以防它看到stringify对对象做了什么。
在使用Javascript进行unescape之后,它看起来更加正常,如:
{\ “shape_1 \”:{\ “颜色\”:\ “#7F0000 \”,\ “数据\”:{\ “B \”:[{\ “娜\”:51.56727431757122,\“OA \“: - 0.10462402858888709} ...
你可以看到,未转义的序列到处都有这些斜线。 当我尝试将其评估为JSON对象时,我得到“非法令牌”。解析方法也失败了。我只是找不到任何方法将这个字符串放回到复杂的JSON对象中。 我已经在网上寻找各种建议,但他们失败了。我也不明白为什么stringify会注入所有这些根本就不应该存在的斜杠。 如果有人知道如何获取该对象,将其放入查询字符串然后解析它我将非常感激。
尼克
更新: 答案是:
encodeURIComponent(JSON.stringify(myObject));
然后在接收端:
var a = querySt("data");
var b = decodeURIComponent(a);
var c = unescape(b);
var d = JSON.parse(c);
或全部在一行
JSON.parse(unescape(decodeURIComponent(querySt("data"))));
尼克
答案 0 :(得分:0)
请参阅http://php.net/manual/de/security.magicquotes.php - 您必须关闭魔术引号。他们是旧的,被弃用的东西,他们是不安全和破坏的东西。
Magic Quotes是一个自动将传入数据转义为PHP脚本的过程。最好使用魔术引号进行编码,并根据需要在运行时转义数据。
Howto:http://www.php.net/manual/de/security.magicquotes.disabling.php
答案 1 :(得分:0)
尝试将此查询字符串转换为json对象
var queryStringToJSON = function (url) {
if (url === '')
return '';
var pairs = (url || location.search).slice(1).split('&');
var result = {};
for (var idx in pairs) {
var pair = pairs[idx].split('=');
if (!!pair[0])
result[pair[0].toLowerCase()] = decodeURIComponent(pair[1] || '');
}
return result;
}
您可以使用 jQuery.param 方法将json对象转换回查询字符串