javascript - 如何找出浏览器如何对输入地址栏中的 URI 进行编码
问题描述
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 的情况下,它会变回原来的形式。这是一个很好的网站,可以查看我在说什么。
我认为浏览器这样做的原因是为了防止 XSS 攻击,但我不是 100% 确定。
推荐阅读
- python - 相当于 Python 中 R 的 ifelse
- javascript - 在 React.js 中更新数组并渲染新数据
- node.js - 创建节点红色泊坞窗图像时出错
- python - 如果只运行一个语句,为什么一个类会打印对象?
- reactjs - 我有一个函数,我想在任务完成后返回多个对象(反应原生)
- mysql - mysqldump 未正确导出视图
- python - 我应该拉什么 docker 镜像才能安装 pyodbc 和 pythonnet?
- c++ - 从 cpprestsdk 创建 http_client 实例的异常
- cmd - 如何使用命令行重命名 Windows 10 机器
- sql - 具有大量值的 SQL 查询 IN 子句