URL 编码器

编码和解码 URL 和特殊字符

如何使用URL 编码器

  1. 1粘贴需要编码的 URL 或查询字符串。
  2. 2选择编码方式:百分号编码(URL encode)或解码。
  3. 3查看编码结果,特殊字符被安全转义为 %XX 形式。

URL 编码是什么?

空格 → %20;中文/特殊字符 → UTF-8 字节的 %XX 序列

URL 只能安全包含少数字符(字母、数字和少数符号)。空格、中文、&、= 等字符在网址中有特殊含义或无法传输,必须用百分号编码转义为 % 加两位十六进制。

编码后链接才能被正确解析与传输,避免参数被截断或注入。解码则是逆向过程,把 %XX 还原为原字符。表单提交、API 调用与拼接查询参数时常会用到。

URL 编码(百分号编码)把非 ASCII 字符和保留字符转成 %XX 形式,XX 是该字节的十六进制。中文在 UTF-8 下通常是 3 个字节,所以「中」编码成 %E4%B8%AD(3 个 %XX)。**关键点是:编码的是字节而非字符**——同一字符在 UTF-8 和 GBK 下编码结果完全不同,这也是早期乱码问题的根源。现代浏览器和服务器统一用 UTF-8。

最容易踩的坑有两个:① **空格编码成 %20 还是 +**?在 application/x-www-form-urlencoded(表单 POST)里空格是 +,在 URL 路径和查询串里是 %20。混用会导致服务端解析出错。② **多次编码**:对已编码的串再编一次,%20 会变成 %2520(% 本身被编成 %25),必须解码两次才能还原。**判断是否需要编码的标准是:如果字符在 URL 中有特殊语法含义,或不是 ASCII,就必须编码。**

字符编码含义是否需编码
空格%20空格是(+ 亦可)
!%21感叹号否
"%22双引号是
#%23片段标识是(会截断 URL)
&%26参数分隔是(会截断参数)
+%2B加号是(会被解成空格)
/%2F路径分隔视位置而定
:%3A协议分隔视位置而定
=%3D键值分隔值中需编码
?%3F查询起始是
中%E4%B8%AD中文字符是(UTF-8 三字节)

常见字符的 URL 编码对照

常见问题

为什么空格变成 %20?

空格不是 URL 安全字符,标准编码为 %20(也有用 + 表示表单空格的变体)。

中文为什么要编码?

URL 基于 ASCII,中文需先按 UTF-8 转成字节再逐字节 %XX 编码,接收方再解码还原。

编码会丢失信息吗?

不会。编码是可逆的,解码后即可完整还原原始字符串。

哪些字符可以不编码?

URL 规范(RFC 3986)允许的「非保留字符」:字母 A–Z、a–z,数字 0–9,以及 - _ . ~ 这四个符号。这些在任何位置都不需要编码。其余字符理论上都应编码,但实践中浏览器会宽容处理一部分。安全起见,构造 URL 时只保留这 66 个字符原样,其他一律编码。

encodeURI 和 encodeURIComponent 有什么区别?

encodeURI 假设输入是完整 URL,不会编码 : / ? # & = 等语法字符;encodeURIComponent 假设输入是 URL 的一个组成部分(参数值),会把 : / ? # & = 全部编码。**传参数值时必须用 encodeURIComponent**,用错会导致参数被截断或注入额外参数。例如 value 为 a&b=1 时,用 encodeURI 拼接会变成两个参数,用 encodeURIComponent 才是正确的一个参数值。

更多工具