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

IT技术 javascript
2021-03-15 00:25:30

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

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

5个回答

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。因此,您始终必须先对其进行编码。生成的编码字符串永远不会包含这些字符。在服务器上,您在假设值已编码的情况下解码该值。
2021-04-25 00:25:30
您将如何处理值确实包含&or 的情况?
2021-05-19 00:25:30

使用 '&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 编码,它将对& 符号进行编码,这样就不会发生这种情况。

escape类似于encodeURIComponent,但会为该+字符和任何非 ASCII 字符生成错误的输出它不应该被使用。
2021-04-25 00:25:30

老实说,使用 Google URL Shortener。然后你可以在 url 查询字符串中使用 URL 代码:http : //example.com/url/A7dh3

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