首页 > 解决方案 > 如何找出浏览器如何对输入地址栏中的 URI 进行编码

问题描述

encodeUri 和 encodeUriComponent 的 mdn 文档描述了单引号没有被编码,因为它们在没有编码的 url 中是有效的,并且这在浏览器中的工作方式相同。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent

然而,浏览器地址栏似乎有自己的 URI 编码规则。如果您在 Chrome 或 Safari 中将单引号放入 URI 中,它会将其编码为 %27,Firefox 似乎也这样做,然后可能会将其再次打印为单引号字符

即在导航到 chrome 中的 url 之前: 在此处输入图像描述

点击进入/导航到网址后 在此处输入图像描述

我似乎找不到任何有关浏览器如何在其地址栏中对这些进行编码的文档。我只遇到过单引号字符,但很好奇为什么这与用于编码的 javascript 实现不同,以及为什么当规范说它们很好时它完全被编码。

标签: javascriptgoogle-chromefirefoxsafari

解决方案


我自己也想知道这一点。发生的情况是将值转换为十六进制数据(例如 ' 如何变成 27),然后在前面添加一个 % 以将字符与 URL 的其余部分区分开来。当数据显示出来时,在 FireFox 的情况下,它会变回原来的形式。这是一个很好的网站,可以查看我在说什么。

我认为浏览器这样做的原因是为了防止 XSS 攻击,但我不是 100% 确定。


推荐阅读