encodeUri和encodeUriComponent的mdn文档描述了单引号没有被编码,因为它们在没有编码的url中是有效的,并且这在浏览器中的工作方式相同。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent
但是浏览器地址栏似乎具有自己的URI编码规则。如果您在Chrome或Safari中将单引号放入URI中,它将被编码为%27,Firefox似乎也会这样做,然后可能会再次漂亮地将其打印为单引号字符
我似乎找不到任何有关浏览器如何在其地址栏中对它们进行编码的文档。我只用单引号引起来,但是很好奇为什么这与用于编码的javascript实现不同,为什么在规范说还可以的情况下完全对其进行编码。
我自己也想知道这一点。发生的情况是将值转换为十六进制数据(例如'如何变成27),然后在前面添加%来区分字符与URL的其余部分。显示数据时,对于FireFox,它将恢复为原始格式。 Here's a good website to see what I'm talking about.
我认为浏览器这样做的原因是为了防止XSS攻击,但我不确定100%。