URL 编码器与解析器
在你的设备上运行,不会发送任何内容。一切都在您自己的设备上进行。您输入或粘贴的任何内容都不会被发送到任何地方。
结果将显示在这里
对 URL 和查询字符串进行编码或解码,或将完整的 URL 解析为各个部分,并在实时表格中编辑查询字符串——全部在浏览器中完成。
URL 只能安全地包含有限的一组 ASCII 字符——其他任何字符,例如空格、& 符号或非拉丁字母,都必须先编码为 %XX 形式的百分号编码,才能在其中传输。此工具按照浏览器所使用的相同规则对文本进行编码和解码,并可单独将完整的 URL 解析为协议、主机、端口、路径、查询字符串和哈希,让您可以在表格中编辑查询参数,并实时查看 URL 的重建过程。一切均在您的浏览器本地运行——任何内容都不会被上传。
常见问题
什么是百分号编码?
百分号编码(也称为 URL 编码)用 % 加上两位十六进制值来替换字符,并针对该字符 UTF-8 表示中的每个字节重复此过程。正因如此,URL 才能携带空格(%20)、& 符号(%26)或表情符号,而不会与 URL 自身的语法混淆。
encodeURIComponent 与 encodeURI 有什么区别?
encodeURIComponent 会转义除少数非保留字符外的所有字符,因此适合用于单个值——比如一个查询参数或路径片段——因为它也会转义 & 和 = 等原本会被解读为 URL 结构的字符。encodeURI 则用于整个 URL:它会保留 :、/、?、& 和 # 等结构字符不变,以确保 URL 仍能正常工作,只转义 URL 中确实不能出现的字符,例如空格。将整个 URL 传入 encodeURIComponent 会破坏该 URL,因为斜杠和冒号也会被转义。
还应该使用 escape() 和 unescape() 吗?
不应该。这两个函数早在引入 encodeURIComponent 的那一版 JavaScript 标准中就已被弃用,因为 escape() 不会按照 HTTP 和现代 URL 所期望的方式编码非 ASCII 字符——对于 Latin-1 之外的所有字符,它使用一种非标准的 %uXXXX 形式,decodeURIComponent 无法将其正确解析回来。此工具保留该选项,仅供您查看旧系统产生的输出。
为什么查询字符串中的 + 会变成空格?
查询字符串历来源自 HTML 表单提交,其使用的是 application/x-www-form-urlencoded 格式:它用 + 而非 %20 来编码真正的空格,而此工具的解析器(以及 JavaScript 的 URLSearchParams)在解码时会将两者都视为空格。如果某个值确实需要一个字面上的加号,则必须将其本身编码为 %2B。
像 ?tag=a&tag=b 这样重复的参数会怎样处理?
不会丢失任何内容——此工具会按顺序保留每一次出现,作为查询参数表格中独立的一行,这与大多数服务器框架将重复的键收集为一个列表的方式相同。编辑或删除某一行不会影响其他行。
为什么解析器会为我的 URL 假定 https://?
像 example.com/path 这样的字符串没有协议,因此无论是浏览器还是此工具,都无法判断它究竟是一个网址、用于其他协议,还是纯文本。解析器不会直接拒绝它,而是假定使用 https://,以便您仍然可以查看和编辑它——每次发生这种情况都会出现提示,如果实际想使用的是其他协议,您可以在协议字段中进行更正。