使用&url='+encodeURIComponent(url);
将 URL 从浏览器传递到服务器将对 url 进行编码,但是当它在服务器上被解码时,url 的参数被解释为单独的参数,而不是单个 url 参数的一部分。
将 url 作为 url 参数传递的推荐方法是什么?
使用&url='+encodeURIComponent(url);
将 URL 从浏览器传递到服务器将对 url 进行编码,但是当它在服务器上被解码时,url 的参数被解释为单独的参数,而不是单个 url 参数的一部分。
将 url 作为 url 参数传递的推荐方法是什么?
encodeURIComponent()
应该管用。例如,
'&url=' + encodeURIComponent("http://a.com/?q=query&n=10")
产生
"&url=http%3A%2F%2Fa.com%2F%3Fq%3Dquery%26n%3D10"
(它没有任何值&
或?
在值中)。当您的服务器获取此 url 时,它应该能够对其进行解码以获取原始 URL:
param["url"] = "http://a.com/?q=query&n=10"
我不确定您使用的是什么服务器(例如 Rails、Django ……),但这应该可以在任何普通系统上“开箱即用”。
使用 '&url='+encodeURIComponent(url); 将 URL 从浏览器传递到服务器将对 URL 进行编码
是的,这就是你应该做的。encodeURIComponent
是对文本值进行编码以放入查询字符串的一部分的正确方法。
但是当它在服务器上被解码时,url 的参数被解释为单独的参数,而不是作为单个 url 参数的一部分。
然后服务器确实很坏。如果确实发生了这种情况,则需要在服务器端修复它。
代码?
我遇到了这个问题,我个人无法使用任何已接受的答案,但也可以通过将 url 编码为 Base 64,将其作为参数传递,然后对其进行解码来完成。使用 javascript,您可以使用 btoa(s) 将字符串 s 编码为 base 64,并使用 atob(s) 进行解码。其他语言有做同样事情的方法。Base 64 有点像用 64 个字符(例如,所有大写字母、所有小写字母和几个符号)来表示更大的一系列字符。有点像我们在二进制中表示字母的方式。但是使用起来很好,因为这样我们就可以将 base64 字符串作为参数传递,然后它们就不会干扰/以奇怪的方式被解释,然后我们可以在下一阶段对其进行解码。
使用escape() 对它进行url 编码,它将对& 符号进行编码,这样就不会发生这种情况。
老实说,使用 Google URL Shortener。然后你可以在 url 查询字符串中使用 URL 代码:http : //example.com/url/A7dh3
在您的应用程序中,获取并添加 Google URL Shortener 域名,然后执行重定向。这也通过 Google Analytics 添加了对 URL 的跟踪。这种方法有很多优点。只是一个简短的代码并添加了跟踪数据。