X114

URL 百分号编码解码与参数分析工具

严格遵循 RFC 3986 标准的 URL 百分号编码与解码。支持 Component 与 Full 模式切换、Query 参数智能表格拆解与多语言 UTF-8 安全转义。

URL Percent-Encoder & Parameter Inspector

Scope:
Real-World Scenario Presets
66 chars
https%3A%2F%2Fx114.org%2Fsearch%3Fq%3Dhello%20%E4%B8%96%E7%95%8C%26ref%3D%F0%9F%9A%80%26category%3Ddeveloper%20tools
Output: 116 charsExpansion: 75.8%

Detected Query Parameters (3)

q=hello 世界
ref=🚀
category=developer tools

关于

本 URL 百分号编码解码与参数分析工具 严格遵循 RFC 3986 (Uniform Resource Identifier: Generic Syntax) 与 WHATWG URL 国际标准,提供纯前端的高可靠 URL 字符集转义、逆向解码与 HTTP Query 查询参数智能结构化拆解。所有解析操作 100% 运行在您本机的浏览器内存中,绝不向任何外部网络上传请求链接、OAuth 凭据或敏感业务参数。


RFC 3986 URL 编码原理与字符集划分

在国际互联网架构中,统一资源标识符(URI / URL)被严格限制在一个特定的 ASCII 安全字符子集中。任何超出此范围的字符(包括空格、中文/日文/韩文等多语言文字、西欧重音符号以及现代 Emoji 表情),在网络传输前均必须转换为“百分号编码(Percent-Encoding)”,即由一个百分号 % 加上两位代表该字节十六进制数值构成的三元组序列(如 %20)。

RFC 3986 将 ASCII 字符精确划分为两大功能阵营:

  1. 未保留字符(Unreserved Characters,永不编码):
    • 英文数字:0-9,大写字母 A-Z,小写字母 a-z
    • 四种安全标点:连字符 -、下划线 _、英文句点 .、波浪线 ~
  2. 保留字符(Reserved Characters,充当结构分隔符):
    • 核心语法符号:冒号 :、正斜杠 /、问号 ?、井号 #、方括号 []、艾特符 @
    • 子组件分隔符:感叹号 !、美元符 $、与号 &、单引号 '、圆括号 ()、星号 *、加号 +、逗号 ,、分号 ;、等号 =

核心函数横向对比:encodeURI vs encodeURIComponent vs escape

选错编码函数是导致线上 Web 应用 404 故障、重定向参数丢失乃至 SSRF 安全漏洞的最高频原因:

对比维度 encodeURI (完整 URL 模式) encodeURIComponent (组件参数模式) 早期 escape() (已被标准彻底废除)
核心设计目的 转义一个已完整拼接的 URL,保留 其协议与路径层级 转义单个 Query 参数值、路径片段或内嵌重定向链接 1990 年代老旧函数(严禁用于现代开发)
是否编码保留分隔符 (:/?&=#) 不编码(保护协议头、域名与目录结构不被破坏) 坚决编码(将 : 转为 %3A,/ 转为 %2F,& 转为 %26) 行为不确定且标准不一致
空格转义形式 转为 %20 转为 %20 转为 %20
多字节 Unicode UTF-8 兼容性 完美遵循 RFC 3986(每个非 ASCII 字符输出 2~4 组 %XX) 完美遵循 RFC 3986(每个非 ASCII 字符输出 2~4 组 %XX) 严重缺陷:输出非标准的 %uXXXX 格式
最佳工程实践场景 用户在输入框粘贴完整 URL 时的整体合规净化 拼接 OAuth 回调地址 (redirect_uri)、传递嵌套 JSON 无任何适用场景,禁止使用

空格转义世纪之争:%20 与 + 的本质差异

  • RFC 3986 国际 URI 标准:空格必须严格转义为 %20。这是现代 RESTful API、前后端 JSON 数据交换以及标准 URL 路径的通用基准。
  • HTML 表单 POST / application/x-www-form-urlencoded:在早期 HTML 表单提交规范中,空格被历史性地约定为加号 +。因此现代后端路由在接收到 + 时通常会自动解析为空格,但在标准 RESTful 路径中若混用 + 可能引发解析混淆。本工具解码引擎智能兼容这两种规范。

开发者跨语言编码示例

1. JavaScript / TypeScript (Node.js & 现代浏览器)

// 使用现代标准 URLSearchParams 自动安全编码
export function createSearchUrl(keyword: string, tags: string[]): string {
  const url = new URL('https://x114.org/search');
  url.searchParams.set('q', keyword);
  url.searchParams.set('tags', tags.join(','));
  return url.toString();
}

2. Python 3 (urllib.parse)

from urllib.parse import quote, unquote, urlencode
# 相当于 encodeURIComponent
safe_param = quote("hello 世界 & 开发者", safe="")
# 逆向解码
plain = unquote(safe_param)

3. Go (net/url)

package main
import "net/url"

func main() {
	encoded := url.QueryEscape("https://x114.org/tools?q=hello world")
	path := url.PathEscape("user profile/photos")
}

常见问题