Javascript 如何将JSON字符串转义到URL中?
使用Javascript,我想生成一个指向页面的链接。页面的参数位于我用JSON序列化的Javascript数组中 所以我想生成这样的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():
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
- 对于阵列:
- 对于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"