URL 编码与解码
编码加密所有处理都在浏览器本地完成,数据不上传服务器
把文本按 percent-encoding 转义成 %XX 形式,或把 %XX 还原回文本。两种方式的结果只差 11 个字符:encodeURIComponent 会把 & 编成 %26,encodeURI 则保留它。前者用于编码参数值(值里的 & 和 = 若不编掉,会被服务器当成参数分隔符,悄悄多切出一个参数),后者用于编码整个 URL(:// ? & = # 是它的结构,不能编)。选错不会报错,只会让链接在别人那儿打不开,所以这里把选择摆到明面上。解码出错时还会区分原因:转义被截断,还是原文根本不是 UTF-8。
功能
- 双向转换:文本 ⇄ percent-encoding(%XX)
- 两种方式可选:encodeURIComponent(编参数值)与 encodeURI(编整个 URL)
- 中文、空格与 emoji 一律按 UTF-8 编码,与浏览器地址栏里的写法一致
- 解码失败时指出具体原因:转义被截断(% 后面不是两位十六进制数)还是原文不是 UTF-8(如 GBK)
- 明确不把 + 当成空格 —— 那是表单编码的规则,不是 percent-encoding
- 输入即出结果,不需要点按钮
使用方法
- 选择方向:编码或解码
- 选择编码方式:编参数值还是整个 URL
- 把内容粘贴进输入框,结果实时出现
- 点「复制」取走结果
常见问题
- encodeURIComponent 和 encodeURI 到底该用哪个?
- 一条规则就够:整条 URL 用 encodeURI,单独的参数值用 encodeURIComponent。两者只在 ; , / ? : @ & = + $ # 这 11 个字符上分歧 —— encodeURI 保留它们(URL 的结构靠它们),encodeURIComponent 把它们也编掉。把整条 URL 丢给 encodeURIComponent,连 https:// 里的 :// 都会被编掉,得到的地址直接打不开。
- 为什么解码后还留着 %3F、%2F 这样的转义?
- 因为编码方式选的是 encodeURI 那一档。它对应的 decodeURI 同样不还原保留字符 —— %3F 的意思是「这里是数据里的一个 ?,不是查询串的开头」,还原成 ? 会改变 URL 的含义。想全部还原,切到 encodeURIComponent 那一档。
- 空格为什么编成 %20 而不是 +?
- percent-encoding 里空格的转义就是 %20。用 + 表示空格是表单提交(application/x-www-form-urlencoded)的另一套规则,两者不能混用。本工具遵循前者,也不会把 + 解成空格。
- 提示「原文可能不是 UTF-8」是什么意思?
- 转义序列本身是完整的,但解出来的字节不是合法的 UTF-8 —— 常见于从 GBK 编码的老系统里复制出来的链接。GBK 的「你」是 %C4%E3,而 UTF-8 下是 %E4%BD%A0。这种情况本工具无法替你猜编码,建议改用支持指定编码转换的工具。
相关工具
URL 解析
网络与网页在线 URL 解析:拆出协议、主机、端口、路径、查询参数与锚点,参数逐个解码并与原始值对照,缺协议自动补 https://。全部在浏览器本地完成。
Base64 编解码
编码加密把文本转成 Base64,或把 Base64 还原成文本,中文与 emoji 都按 UTF-8 正确处理。全部在浏览器本地完成,内容不上传。
HTML 实体编解码
编码加密把 < > & 与引号转成 HTML 实体,也能把实体还原成字符,而且只解一遍:&lt; 得到的是 < 而不是尖括号。全部在浏览器本地完成。
JWT 解析
编码加密把 JWT 拆成 header、payload、signature 三段并格式化,把 iat、exp 等时间声明换算成可读时间。只解析、不验证签名,输出里会写明。全部在浏览器本地完成,不上传。
Unicode 转义
编码加密把中文、emoji 这类非 ASCII 字符转成 \uXXXX、\xXX 或 &#xXXXX; 的转义写法,也能还原回来。全部在浏览器本地完成,不上传。
哈希计算
编码加密算出文本的 MD5、SHA-1、SHA-256 或 SHA-512 摘要,中文按 UTF-8 字节计算,结果与 openssl、sha256sum 逐位一致。全部在本地完成,不上传。