Javascript 如何将JSON字符串转义到URL中?

Javascript 如何将JSON字符串转义到URL中?,javascript,jquery,json,url,escaping,Javascript,Jquery,Json,Url,Escaping,使用Javascript,我想生成一个指向页面的链接。页面的参数位于我用JSON序列化的Javascript数组中 所以我想生成这样的URL: http://example.com/?data="MY_JSON_ARRAY_HERE" 我需要如何转义JSON字符串(数组序列化)以将其作为参数包含在URL中? 如果有使用JQuery的解决方案,我会喜欢它 注意:是的,页面的参数需要在一个数组中,因为有很多参数。我想以后我会使用bit.ly来缩短链接。使用encodeURIComponent():

使用Javascript,我想生成一个指向页面的链接。页面的参数位于我用JSON序列化的Javascript数组中

所以我想生成这样的URL:

http://example.com/?data="MY_JSON_ARRAY_HERE"
我需要如何转义JSON字符串(数组序列化)以将其作为参数包含在URL中?

如果有使用JQuery的解决方案,我会喜欢它


注意:是的,页面的参数需要在一个数组中,因为有很多参数。我想以后我会使用bit.ly来缩短链接。

使用
encodeURIComponent()

您可以使用URL对查询字符串的部分进行安全编码:

var array = JSON.stringify([ 'foo', 'bar' ]);
var url = 'http://example.com/?data=' + encodeURIComponent(array);
或者,如果您将此作为AJAX请求发送:

var array = JSON.stringify([ 'foo', 'bar' ]);
$.ajax({
    url: 'http://example.com/',
    type: 'GET',
    data: { data: array },
    success: function(result) {
        // process the results
    }
});

德兰给出的答案是完美的。如果有人想分别命名参数或传递多个JSON字符串,下面的代码可能会有所帮助

JQuery

var valuesToPass = new Array(encodeURIComponent(VALUE_1), encodeURIComponent(VALUE_2), encodeURIComponent(VALUE_3), encodeURIComponent(VALUE_4));

data = {elements:JSON.stringify(valuesToPass)}
PHP


希望这有帮助

我想做同样的事情。我的问题是我的url太长了。我今天找到了一个解决方案

我还没有完全测试过。但是,以下示例显示了使用3种不同方法对同一大对象进行编码后字符串输出的字符长度:

  • 2651个字符,使用
    jQuery.param
  • 1691个字符,使用
    JSON.stringify+encodeURIComponent
  • 821个字符,使用
    JSURL.stringify
显然,对于URL编码js对象,JSURL具有最优化的格式

线在 显示编码和解析的基准

注意:测试后,jsurl.js库似乎使用了ECMAScript 5函数,如Object.keys、Array.map和Array.filter。因此,它只适用于现代浏览器(没有IE8及以下版本)。但是,这些函数都是多边形填充,这将使其与更多浏览器兼容

  • 对于阵列:
  • 对于object.keys:

    • 我会提供一个古怪的选择。有时使用不同的编码更容易,特别是当您处理的各种系统不能以相同的方式处理URL编码的细节时。这不是最主流的方法,但在某些情况下可以派上用场

      您可以对数据进行base64编码,而不是URL编码。这样做的好处是编码数据非常通用,只包含字母字符,有时还包含尾随的
      =
      。例如:

      字符串的JSON数组:

      ["option", "Fred's dog", "Bill & Trudy", "param=3"]
      
      该数据,URL编码为
      数据
      参数:

      "data=%5B%27option%27%2C+%22Fred%27s+dog%22%2C+%27Bill+%26+Trudy%27%2C+%27param%3D3%27%5D"
      
      相同,base64编码:

      "data=WyJvcHRpb24iLCAiRnJlZCdzIGRvZyIsICJCaWxsICYgVHJ1ZHkiLCAicGFyYW09MyJd"
      

      base64方法可以稍微短一点,但更重要的是它更简单。我经常在cURL、web浏览器和其他客户端之间移动URL编码的数据时遇到问题,通常是由于引号、嵌入的
      %
      符号等原因。Base64非常中性,因为它不使用特殊字符。

      似乎它编码的字符比需要的多(当我在Firefox中粘贴链接时,一些字符被还原回来(即
      {[“
      )。有没有办法只编码必要的字符,这样我就可以缩短我的URL?另请参见0.1.4版,如果您仍然需要这些字符,它也与IE 6-8兼容。不需要对PHP$\u POST或任何其他(GET、REQUEST等)中的urldecode()数据进行解码。根据您从这里开始所做的操作,您可能会因为安全问题(SQL注入等)而打开自己的大门。最终,您找到了我朋友的地址(%26)(&)。base64字符串的问题是,它们可能包含斜杠(/)字符,这将使url无效…这是正确的,但您可以选择在base64中使用的字符:将
      /
      替换为
      $
      \uu
      或根据RFC 3986不需要url编码的任何其他字符。
      ["option", "Fred's dog", "Bill & Trudy", "param=3"]
      
      "data=%5B%27option%27%2C+%22Fred%27s+dog%22%2C+%27Bill+%26+Trudy%27%2C+%27param%3D3%27%5D"
      
      "data=WyJvcHRpb24iLCAiRnJlZCdzIGRvZyIsICJCaWxsICYgVHJ1ZHkiLCAicGFyYW09MyJd"