悟夕导航

URL 编码:别让“空格 + 中文”把链接搞崩

61 0 0

URL 只能安全运送 7 位 ASCII 字符,任何“超标”字符(空格、中文、&、# 等)必须先“打包”成 %xx 形式,否则浏览器、网关、服务器三方一起懵圈。


1. 哪些字符必须打包?

典型字符打包后原因
空格%20+肉眼看不见,易被截断
&%26与查询分隔符冲突
=%3D键值对解析器会误判
#%23锚点标志,不编码就提前结束 URL
中文%E4%BD%A0非 ASCII,必须 UTF-8 后转 %
% 本身%25保留字,用来表示 %,自身需转义

2. JS 两行搞定打包

// 1. 整段 URL 外壳保留,只打包参数
let url = 'https://example.com/search?q=' + encodeURIComponent('空格+中文&危险字符');
// 结果:https://example.com/search?q=%20%2B%E4%B8%AD%E6%96%87%26%E5%8D%B1%E9%99%A9%E5%AD%97%E7%AC%A6

// 2. 只想让浏览器地址栏可读,用 encodeURI
let readable = encodeURI('https://example.com/我的文件.txt');
// 结果:https://example.com/%E6%88%91%E7%9A%84%E6%96%87%E4%BB%B6.txt
  • encodeURIComponent 见谁打谁,适合“参数值”
  • encodeURI 放过保留字符,适合“整条地址”

3. 表单自动打包?别全信!

GET 表单提交时,浏览器会帮你编码空格、中文;但不会编码 &= 这类“保留字”——如果用户在输入框里敲了 &,服务器会把后半截当成新参数,直接裂成两半 。
→ 核心参数仍建议手动 encodeURIComponent() 后再拼 URL。


4. 后端也要补刀

语言打包函数拆包函数
JavaScriptencodeURIComponent()decodeURIComponent()
Pythonurllib.parse.quote()urllib.parse.unquote()
JavaURLEncoder.encode()URLDecoder.decode()

统一用 UTF-8 字符集 编码,可最大限度避免乱码 。


5. 一句话收工

URL 编码没有黑科技,就是“把歧义字符换成 %xx”。
前端拼参数、后端接参数,都记得先打包再传输——
省得用户一个空格,把你的链路炸成 400 Bad Request。

0
快来点个赞吧

发表评论

隐私评论

评论列表

来写一个评论吧