如何转义一个JSONstring在URL中?

使用Javascript,我想要生成一个页面的链接。 该页面的参数是在我用JSON序列化的Javascript数组中。

所以我想生成一个这样的URL:

http://example.com/?data="MY_JSON_ARRAY_HERE" 

我如何需要转义我的JSONstring(数组序列化),以包括它作为参数的URL?

如果有使用JQuery的解决scheme,我会喜欢它。

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

 encodeURIComponent(JSON.stringify(object_to_be_serialised)) 

您可以使用encodeURIComponent来安全地对一部分查询string进行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 } }); 

我正在寻找做同样的事情。 问题是我的url变得太长了。 今天我使用Bruno Jouhier的jsUrl.js库find了一个解决scheme。

我还没有完全testing它。 但是,下面是使用3种不同的方法对同一个大对象进行编码后string输出的字符长度的示例:

  • 使用jQuery.param 2651个字符
  • 使用JSON.stringify + encodeURIComponent 1691个字符
  • 使用JSURL.stringify 821个字符

很明显,JSURL为urlEncoding一个js对象提供了最优化的格式。

https://groups.google.com/forum/?fromgroups=#!topic/nodejs/ivdZuGCF86Q上的主题显示了编码和parsing的基准。;

注意 :testing之后,它看起来像jsurl.js库使用ECMAScript 5函数,如Object.keys,Array.map和Array.filter。 因此,它只能在现代浏览器(不,即8和以下)上工作。 但是,这些函数的polyfill会使它与更多的浏览器兼容。

  • 数组: https : //stackoverflow.com/a/2790686/467286
  • 对于object.keys: https ://stackoverflow.com/a/3937321/467286

使用encodeURIComponent()

 var url = 'index.php?data='+encodeURIComponent(JSON.stringify({"json":[{"j":"son"}]})), 

德兰给出的答案是完美的。 只要添加到它 – 因为有人想要命名参数或单独传递多个JSONstring – 下面的代码可以帮助!

JQuery的

 var valuesToPass = new Array(encodeURIComponent(VALUE_1), encodeURIComponent(VALUE_2), encodeURIComponent(VALUE_3), encodeURIComponent(VALUE_4)); data = {elements:JSON.stringify(valuesToPass)} 

PHP

 json_decode(urldecode($_POST('elements'))); 

希望这可以帮助!