URL 编码 / 解码工具
对 URL 或单个 URL 组件进行百分号编码或解码,输入时实时更新。你输入的任何内容都不会被发送到任何地方。
组件 vs 完整 URI
两者编码的字符不同。
组件编码会转义在单个 URL 片段中不安全的所有字符,包括 &、= 和 ?,适用于查询参数值。完整 URI 编码会保留这些字符不变,因为它们在完整 URL 中具有结构性意义,适用于编码整个地址而非其中一部分。
为什么要编码 URL
URL 只能包含一组有限的 ASCII 字符。空格、带重音的字母、表情符号,以及像 & 或 # 这样的保留符号需要进行百分号编码(例如空格编码为 %20),这样它们才能作为链接的一部分被传递而不破坏链接。
工作原理
编码调用的是浏览器自身的 encodeURIComponent 或 encodeURI 函数,与 JavaScript 代码使用的是同一函数,因此输出结果与浏览器或 HTTP 库产生的结果完全一致。每个不安全的字节会变成一个百分号加上其 UTF-8 编码的两位十六进制数字:空格变成 %20,多字节字符会展开成多个转义序列(é 是 %C3%A9)。
存在两种编码模式,是因为「编码一个 URL」实际上有两种不同的含义。组件模式会转义除字母、数字和少数几个安全符号之外的所有字符,包括 / ? & = :。这正是你放入查询字符串中的单个值所需要的,否则值中的 & 符号会把你的参数一分为二。完整 URL 模式会保留结构性字符不变,让完整的 URL 继续正常工作,只转义那些完全不能以原始形式出现的字符。对整个 URL 使用组件编码会破坏它;对参数值使用完整 URL 编码则是一个潜在的注入漏洞。应根据你编码的对象来选择,而不是凭习惯。
解码模式运行 decodeURIComponent,并附加一个实用步骤:加号会先被转换为空格,因为 HTML 表单编码(也就是查询字符串中常见的 application/x-www-form-urlencoded 格式)历来用 + 表示空格。格式错误的输入,比如一个孤立的 % 后面没有跟两位十六进制数字,会抛出 URIError,工具会捕获并报告这个错误,而不是显示部分解码的文本。如果解码一次后仍然留有 %25xx 这样的序列,说明你的字符串被编码了两次;再解码一次即可。
两个方向都只是标签页里对内置函数的单次调用。开发者工具的 Network 面板在你输入时不会显示任何流量,因此包含密钥的令牌和 URL 都只留在你的电脑上。