🌐 ZH

🔗 URL编码器/解码器

安全地对URL进行编码或解码。处理查询参数中的特殊字符、中文和空格,生成有效的URL。

指南

了解更多

01

1. 什么是URL编码?

URL编码(百分号编码)是将URL中不安全的字符转换为%加十六进制代码的过程。由于URL只允许ASCII字符,因此中文、特殊字符、空格等都需要编码。例如,空格变为%20,@变为%40,中文"你好"变为%E4%BD%A0%E5%A5%BD。URL编码在RFC 3986标准中定义,除A-Z、a-z、0-9、-、_、.、~以外的字符都必须编码。查询参数、路径、哈希等URL的各个部分有不同的编码规则。

02

2. 为什么要对特殊字符进行编码

在URL中特殊字符具有特殊含义,因此若要作为值使用则必须编码。例如,&是参数分隔符,所以要在值中包含&就必须编码为%26。=是键值分隔符,?表示查询开始,#表示片段开始。空格也编码为+或%20。如果不对中文或特殊字符进行编码,服务器可能无法正确解析或返回404错误。特别是在URL中包含搜索词或用户输入值时,务必进行编码。

03

3. 查询参数编码

查询参数是URL中最常需要编码的部分。例如:https://example.com/search?q=搜索词&category=IT。这里的"搜索词"和"IT"都应进行编码。使用JavaScript的encodeURIComponent()可以对=、&、?等进行编码,从而安全地作为查询参数值传递。encodeURI()用于编码整个URL,但不会编码=、&、?,因此不适合查询值。请始终使用encodeURIComponent()分别对键和值进行编码。

04

4. encodeURI 与 encodeURIComponent

JavaScript有两个URL编码函数。encodeURI()编码整个URL,不会编码:、/、?、&、=等URL结构字符。用于编码完整的URL。encodeURIComponent()编码URL的部分(参数值等),并对所有结构字符进行编码。用于查询参数、路径段等单独的组件。在大多数情况下,使用encodeURIComponent()更安全。可分别使用decodeURI()和decodeURIComponent()进行解码。

05

5. 国际化域名(IDN)

中文或其他语言的域名(例如:中国.com)会被转换为Punycode。Punycode是一种用ASCII表示Unicode域名的方法,使用xn--前缀。例如:"中国.com"转换为"xn--fiqs8s.com"。浏览器会自动执行此转换,但在代码中直接处理时需要Punycode库。请注意,URL的路径和查询使用普通的百分号编码,而域名使用Punycode。

06

6. URL编码最佳实践

URL编码时有一些注意事项。为防止XSS攻击,请始终对用户输入进行编码。注意不要对已编码的URL重复编码(双重编码问题)。构造URL时,先分别对各部分进行编码再组合。fetch()、axios等HTTP客户端通常会自动编码,因此要避免重复。服务器端通常支持自动解码,所以大多数情况下无需显式解码。在记录日志或调试URL时,查看解码后的形式更易于阅读。