什么是 URL 编码?百分比编码的完整说明
快速解答
URL 编码(百分比编码)将 URL 中的不安全字符替换为 % 后跟两个十六进制数字。例如,空格变为%20,& 变为%26。它确保 URLs 可以毫无歧义地传输。使用我们免费的 URL 编码器和解码器在浏览器中进行转换。
介绍
URL 编码,也称为百分比编码,是一种在 URL 中对特殊字符进行编码的机制,以便它们可以安全地通过互联网传输。 URLs 只能包含一组有限的 ASCII 字符 — 字母、数字和一些保留字符。任何其他字符(空格、引号、非 ASCII 字母)必须编码为百分号 (%),后跟表示字符字节值的两个十六进制数字。 URL 编码由 RFC 3986 定义。
步步
-
了解哪些字符需要编码
非保留字符(A-Z、a-z、0-9、-、_、.、~)不需要编码。保留字符 (:, /, ?, #, [, ], @, !, $, &, ', (, ), *, +, ,, ;, =) 在 URLs 中具有特殊含义,在用作数据时应进行编码。所有其他字符(空格、引号、非 ASCII)都必须进行编码。
-
了解编码机制
每个需要编码的字符都会转换为其 UTF-8 字节序列,然后每个字节表示为 %XX,其中 XX 是十六进制值。空格 (0x20) → %20。非 ASCII 字符“é”(UTF-8:0xC3 0xA9)→ %C3%A9。
-
区分encodeURI 和encodeURIComponent
encodeURI() 对完整的 URL 进行编码,但保留作为 URL 结构一部分的保留字符 (:/?&=)。 encodeURIComponent() 对除非保留字符之外的所有内容进行编码 - 将其用于查询参数值,其中保留字符是数据,而不是结构。
-
解码百分比编码的 URLs
解码与编码相反:%20 → 空格,%C3%A9 → é。使用decodeURI() 获取完整的URLs,使用decodeURIComponent() 获取查询参数值。无效的转义序列(如 %ZZ)会引发错误。
示例
编码一个空格
输入: hello world
输出: hello%20world
对非 ASCII 文本进行编码
输入: café
输出: caf%C3%A9
对查询参数值进行编码
输入: name=John Doe & Co.
输出: name%3DJohn%20Doe%20%26%20Co.
常见问题
- 当只有值需要编码时,对整个 URL 进行编码 — 编码查询参数值,而不是 URL 结构 (://?&=)。
- 双重编码 - 如果 URL 已经编码,则再次编码会产生 %2520 而不是 %20。如果不确定是否已经编码,请先解码。
- 错误地使用encodeURI 与encodeURIComponent —encodeURI 保留 URL 结构字符; encodeURIComponent 对它们进行编码。使用后者作为查询参数值。
- 无效的转义序列 —%ZZ 或末尾的单个 % 无效,并且在解码时会抛出错误。
提示
- 始终对可能包含空格、特殊字符或用户输入的查询参数值进行编码,以防止 URL 注入。
- 对查询参数值使用encodeURIComponent(),对只需要编码不安全字符的完整URLs使用encodeURI()。
- URL 编码不是加密——任何人都可以解码它。切勿使用它来隐藏敏感数据。
- 使用我们的 URL 编码器和解码器在浏览器中进行即时、私密的转换。