URL编码解码 - 在线转码工具
编码/解码URL中的特殊字符和中文
URL编码知识
什么是URL编码?
URL编码将特殊字符转换为%XX格式,确保URL在网络传输中不被破坏或误解。
中文URL编码
中文字符会被转换为UTF-8字节的百分号编码,如"中"→"%E4%B8%AD"。
encodeURIComponent
编码所有特殊字符,适合URL参数值。会编码 : / ? # 等字符。
encodeURI
保留URL结构字符,适合完整URL编码。不编码 : / ? # @ 等字符。
URL安全字符
字母A-Z、a-z,数字0-9,以及-_.~这4个字符是URL安全字符,不需要编码。
空格的编码
空格在URL中可以编码为%20或+号,表单提交通常用+号,路径中用%20。
常见问题
encodeURI和encodeURIComponent有什么区别?
encodeURI用于编码完整URL,会保留URL结构字符(如://、/、?、#、&、=)。encodeURIComponent用于编码URL参数值,会编码所有特殊字符。参数值应该用encodeURIComponent。
为什么URL中的中文要编码?
URL规范规定只能包含ASCII字符。中文等非ASCII字符必须编码,否则可能在传输过程中被破坏。编码后的URL在任何系统和浏览器中都能正确传输和解析。
%20和+号作为空格有什么区别?
%20是RFC 3986标准的空格编码,用于URL路径;+号是application/x-www-form-urlencoded格式的空格编码,用于表单提交的查询字符串。现代推荐统一使用%20。
已经编码的URL再编码会怎样?
会产生双重编码问题。例如%20会变成%2520。解码时就需要多解码一次。在编码前应检查内容是否已经编码,避免重复编码导致的错误。
解码失败提示"URI malformed"是什么原因?
通常是因为输入的字符串不是有效的URL编码格式,比如%后面不是两位十六进制数,或者编码不完整。检查输入是否确实是URL编码后的内容。
前端发请求时参数需要手动编码吗?
使用现代API(如fetch、axios)时,URL参数通常会自动编码。但手动拼接URL字符串时需要用encodeURIComponent编码参数值,避免特殊字符破坏URL结构。
常见字符编码对照
| 字符 | 编码 | 说明 |
|---|---|---|
| 空格 | %20 或 + | URL中最常见的转义字符 |
| ! | %21 | 感叹号 |
| # | %23 | 井号,URL锚点符号 |
| % | %25 | 百分号自身需要转义 |
| & | %26 | URL参数分隔符 |
| = | %3D | URL参数赋值符 |
| ? | %3F | URL查询字符串起始符 |
| / | %2F | 路径分隔符 |