URL 编码(百分号编码)完全指南:查询参数怎么正确转义
一个典型的坏链接 你拼了一个搜索链接,英文下一切正常,用户一输入中文就崩: https://example.com/search?q=书签管理 & page=2 服务器收到的 q 是 书签管理 ,还多了一个叫 page 的参数——本该属于查询值的 & 被当成了分隔符。#、=、?、+ 和空格也有同样的问题。 解决办法是百分号编码(URL 编码):把不安全字符替换成 % 加两个十六进制数字,表示它的 UTF-8 字节。 书签管理 → %E4%B9%A6%E7%AD%BE%E7%AE%A1%E7%90%86 & → %26 空格 → %20 哪些字符是安全的 RFC 3986 把字符分成"未保留"和"保留"两类,只有未保留字符可以原样出现: 类别 字符 说明 未保留 A–Z a–z 0–9 - _ . ~ 任何位置都安全 保留(结构类) : / ? # [ ] @ 在 URL 中有结构含义 保留(子分隔符) ! $ & ' ( ) * + , ; = 在查询串中有含义 其他 空格、"、<、>、%、{}、中文… 必须编码 保留字符不是"不能用",而是"有含义"。关键问题永远是:这个 & 是想表达结构,还是想表达数据?如果是数据,就编码它。 ...