本文目录
什么是 URL 编码?
URL 编码(也称百分号编码)会把在 URL 中不安全或被保留的字符转换成安全的形式。每个不安全字符都会被替换为一个 % 符号,后跟其两位十六进制的 ASCII 码。例如,空格会变成 %20,& 符号会变成 %26。
URL 只能包含一组有限的 ASCII 字符。超出这个范围的字符——包括空格、非 ASCII 字母和特殊符号——必须经过百分号编码,才能在 URL 中安全传输。
URL 编码的工作原理
编码器会识别出在 URL 中不安全的字符,并将它们替换为对应的百分号编码。
- 安全字符识别——字母、数字以及 - _ . ~ 保持不变
- 保留字符处理——在大多数场景下,! * ' ( ) ; : @ & = + $ , / ? # [ ] 会被编码
- Unicode 支持——非 ASCII 字符先按 UTF-8 编码,然后每个字节再做百分号编码
免费试用 —— 无需注册
编码或解码 URL →何时使用 URL 编码
只要 URL 组成部分中出现特殊字符,就需要进行 URL 编码。
- 查询参数——对作为查询字符串参数传递的值进行编码,尤其是用户提供的搜索词
- API 请求——以编程方式构造 API URL 时,对路径段和参数进行编码
- 表单数据——在 GET 请求中将表单数据附加到 URL 之前先进行编码
常见问题
JavaScript 中 encodeURI 和 encodeURIComponent 有什么区别?
encodeURI 对完整的 URL 进行编码,会保留 /、:、# 等字符,因为它们在 URL 中具有结构性含义。encodeURIComponent 对单个 URL 组成部分(如某个查询参数值)进行编码,同时也会对这些结构性字符做百分号编码。若要对单个参数值编码,请始终使用 encodeURIComponent。
为什么空格有时显示为 + 而不是 %20?
application/x-www-form-urlencoded 格式(用于 HTML 表单提交)会把空格编码为 + 而非 %20。这是早期 Web 标准遗留的惯例。在来自 HTML 表单的查询字符串中,+ 表示空格;而在其他 URL 场景中则使用 %20。两者都有效,具体用哪种取决于上下文。
我需要对整个 URL 编码,还是只对其中一部分编码?
只对单个组成部分(路径段、查询参数值)进行编码。对整个 URL 编码会把定义 URL 结构的 :、/ 和 ? 字符也一并编码,从而破坏 URL。原则是:对值进行编码,而不要对构成 URL 的结构性字符编码。