将url作为url参数传递的推荐方法是什么?

时间:2009-11-15 16:03:20

标签: javascript

使用&url='+encodeURIComponent(url);将URL从浏览器传递到服务器将对URL进行编码,但是当在服务器上解码时,url的参数将被解释为单独的参数,而不是单个url参数的一部分。 / p>

将url作为url参数传递的推荐方法是什么?

5 个答案:

答案 0 :(得分:69)

encodeURIComponent()应该有效。例如,

'&url=' + encodeURIComponent("http://a.com/?q=query&n=10")

产生

"&url=http%3A%2F%2Fa.com%2F%3Fq%3Dquery%26n%3D10"

(值中没有&?。 当您的服务器获得此URL时,它应该能够解码它以获取原始文件:

param["url"] = "http://a.com/?q=query&n=10"

我不确定你正在使用什么服务器(例如Rails,Django,......),但这应该在任何正常系统上“开箱即用”。

答案 1 :(得分:3)

  

使用'& url ='+ encodeURIComponent(url);将URL从浏览器传递到服务器将对url进行编码

是的,那就是你应该做的。 encodeURIComponent是对文本值进行编码以放入查询字符串的正确方法。

  

但是当它在服务器上解码时,url的参数被解释为单独的参数,而不是单个url参数的一部分。

然后服务器确实非常破碎。如果这真的发生了什么,你需要在服务器端修复它。

码?

答案 2 :(得分:1)

我遇到了这个问题,我个人无法使用任何已接受的答案,但也可以通过将 url 编码为 Base 64,将其作为参数传递,然后对其进行解码来完成。使用 javascript,您可以使用 btoa(s) 将字符串 s 编码为 base 64,并使用 atob(s) 进行解码。 其他语言有做同样事情的方法。 Base 64 有点像用 64 个字符(例如,所有大写字母、所有小写字母和几个符号)来表示更大的一系列字符。有点像我们在二进制中表示字母的方式。但是很好用,因为这样我们就可以只传递 base64 字符串作为参数,然后它们就不会干扰/以奇怪的方式被解释,然后我们可以在下一阶段对其进行解码。

答案 3 :(得分:-1)

使用escape()对其进行url编码,它会对&符号进行编码,以免发生。

答案 4 :(得分:-4)

老实说,请使用Google URL Shortener。然后,您只需使用网址查询字符串中的网址代码:http://example.com/url/A7dh3

在您的应用程序中,取出并添加Google URL Shortener域名,然后执行重定向。这也会通过Google Analytics添加对网址的跟踪。这种方法有很多优点。只是一个简短的代码和添加的跟踪数据。