2

我知道这已被问过几次,但请多多包涵。

我有一个相当复杂的谷歌地图对象(它包含各种节点、坐标等),我试图将它作为查询字符串传递。

我需要一个播放 javascript/jQuery 的解决方案。

我已经尝试过给出 jQuery 错误的 .param 方法。唯一有效的是“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"Na%5C"%3A51.56727431757122%2C%5C" OA%5C"%3A-0.10462402858888709%7D%2C....

php 将其翻译为: {\\"shape_1\\":{\\"color\\":\\"#7F0000\\",\\"data\\":{\\"b\\":[ {\\"Na\\":51.56727431757122,\\"Oa\\":-0.10462402858888709},...

但是已经说过我不想使用 PHP,我只是向您展示它的作用,以防它帮助您了解 stringify 对对象做了什么。

在我使用 Javascript 取消转义后,它看起来更正常一些,例如:

{\"shape_1\":{\"color\":\"#7F0000\",\"data\":{\"b\":[{\"Na\":51.56727431757122,\"Oa\": -0.10462402858888709},..

如您所见,未转义的序列到处都有这些斜线。当我尝试将其评估为 JSON 对象时,我得到“非法令牌 \”。parse 方法也失败了。我只是找不到任何方法将此字符串放回原来的复杂 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"))));

缺口

4

2 回答 2

0

请参阅http://php.net/manual/de/security.magicquotes.php - 您必须关闭魔术引号。它们是旧的、已弃用的东西,它们是不安全的和破坏的东西。

Magic Quotes 是一个自动将传入数据转义到 PHP 脚本的过程。最好在关闭魔术引号的情况下进行编码,并根据需要在运行时转义数据。

如何:http ://www.php.net/manual/de/security.magicquotes.disabling.php

于 2011-10-31T21:25:42.740 回答
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 对象转换回查询字符串

于 2013-12-19T09:36:27.610 回答