关于 URL 编码
URL 只能包含有限的 ASCII 字符。空格、和号和非 ASCII 字母必须进行百分号编码——替换为百分号后跟代表该字符字节值的两位十六进制数字。例如,空格变为 %20,字母 ä 变为 %C3%A4。
本工具使用 encodeURIComponent,它编码除字母、数字和 - _ . ! ~ * ( ) 之外的所有内容。这是编码查询字符串参数值或路径段(而非整个 URL)时使用的正确函数。
粘贴文本或 URL 组件,选择编码或解码,即时查看结果。
URL 只能包含有限的 ASCII 字符。空格、和号和非 ASCII 字母必须进行百分号编码——替换为百分号后跟代表该字符字节值的两位十六进制数字。例如,空格变为 %20,字母 ä 变为 %C3%A4。
本工具使用 encodeURIComponent,它编码除字母、数字和 - _ . ! ~ * ( ) 之外的所有内容。这是编码查询字符串参数值或路径段(而非整个 URL)时使用的正确函数。
对用于 URL 的文字做百分号编码时,把所有不属于非保留字符集(字母、数字以及 - _ . ! ~ * ' ( ))的字符,替换成百分号加两位十六进制数字,表示该字符的 UTF-8 字节值。例:"hello world" 变成 "hello%20world","café" 变成 "caf%C3%A9"。
| 文字 | 编码后 |
|---|---|
| hello world | hello%20world |
| a=b&c=d | a%3Db%26c%3Dd |
| café | caf%C3%A9 |
| 100% off! | 100%25%20off! |
| user@example.com | user%40example.com |
这些字符和字母、数字以及 - _ . 一起,被定义为可以直接出现在 URI 组件中的安全字符,在其中没有特殊含义,所以 JavaScript 的 encodeURIComponent 会原样保留它们。而 encodeURI 等函数保留的是另一组更大的字符集,因为它们是用来编码整个 URL,而不是单个组件的。
编码单个组件(比如某个查询参数的值)时,应该转义 & 和 = 这类字符,避免它们被误认为是 URL 结构的一部分。编码整个 URL 时则必须保留 :、/、? 和 & 等结构字符不变,这样 URL 才能被正确解析,这也是 encodeURIComponent 和 encodeURI 行为不同的原因。
%20 是 URL 路径和 encodeURIComponent 输出中用于表示空格的通用百分号编码。用 + 表示空格是 application/x-www-form-urlencoded 格式的特有惯例,专门用于 HTML 表单提交和查询字符串,并不是通用的 URL 编码规则。
当 % 后面没有跟着两位合法的十六进制数字,或者解码出的字节不构成合法的 UTF-8 时,解码就会失败——比如粘贴了一个不完整的百分号序列,像缺了最后一个字节的 %E2%9。请检查输入是否是完整、正确编码的百分号文本。
本工具使用 JavaScript 的 encodeURIComponent/decodeURIComponent 对单个文本值做编码和解码,遵循 RFC 3986 定义的非保留字符集;它不解析或校验完整 URL 的结构(协议、主机、路径、查询等分开的组成部分)。
Sources: RFC 3986 - Uniform Resource Identifier (URI): Generic Syntax
最后更新: 2026-08-17