如何转义一个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')));
希望这可以帮助!