有些人对您的问题有看法,也有看法:
请勿使用 escape(),自 ECMAScript v3 起已弃用。
使用 encodeURI() 代替。你也可以使用decodeURI()。
不要使用encodeURIComponent()转义所有的url字符串,因为它会破坏你的URL,使用它只是当你想发送一个url 作为参数。
-
不要使用
' 用于您的 json 中的属性,使用 ",因为上述函数不编码 ' 字符。
例如,您可以将您的 json 添加到 url,然后调用 encodeURI:
var url = 'http://myhost.com/?{"key", "value"}';
var myEncodedurl = encodeURI(url);
//result-->http://myhost.com/?%7B%22key%22,%20%22value%22%7D
但是
encodeURIComponent(url);
//result-->http%3A%2F%2Fmyhost.com%2F%3F%7B%22key%22%2C%20%22value%22%7D
如果您想将所有url 作为参数发送,那么使用encodeURIComponent 会有所帮助,如下所示:
var myEncodedurl = 'http://myotherhost.com/?myurl=' +
encodeURIComponent('http://myhost.com/?{"key", "value"}');
//result-->http://myotherhost.com/?myurl=http%3A%2F%2Fmyhost.com%2F%3F%7B%22key%22%2C%20%22value%22%7D
顺便说一句,对于您的示例,您最好尝试一下:
var url = 'http://www.facebook.com/plugins/registration.php?client_id=183620578322567&redirect_uri=' +
encodeURIComponent('http://example.com/store_user_data.php?&'
+ 'fields=['
+ '{"name":"name"},'
+ '{"name":"email"},'
+ '{"name":"password"},'
+ '{"name":"gender"},'
+ '{"name":"birthday"},'
+ '{"name":"captcha"}'
+ ']&"'
+ 'scrolling="auto"'//extract it from encodeURIComponent if they belong to your original url
+ 'frameborder="no"'//extract it from encodeURIComponent if they belong to your original url
+ 'style="border: none;"'//extract it from encodeURIComponent if they belong to your original url
+ 'width="500"'//extract it from encodeURIComponent if they belong to your original url
+ 'height="600"'/*extract it from encodeURIComponent if they belong to your original url*/);