URL 编码:开发者的瑞士军刀,你可能用错了
Source: Dev.to
TL;DR
encodeURI() = “我在编码完整的 URL” → 保留结构字符,如 / ? & #
encodeURIComponent() = “我在编码单个数据片段” → 编码 除 A-Z a-z 0-9 - _ . ! ~ * ' ( ) 之外的所有字符
当事情出错时
上周我花了一个小时调试支付网关返回的 500 错误。罪魁祸首?我在包含 # 字符的查询参数上使用了 encodeURI()。浏览器把 # 之后的所有内容当作片段标识符,根本没有发送到服务器。若使用 encodeURIComponent() 就能避免这个问题。
我现在遵循的 3 条规则
- 查询字符串的值 → 始终 使用
encodeURIComponent()。没有例外。 - 完整的 URL → 使用
encodeURI(),但前提是你确信各组件中不含特殊字符。 - 不确定时 → 使用
encodeURIComponent()。最坏的情况是编码得太多,最好的情况是避免了 bug。
懒人专用的免费工具
有时我只想粘贴一个很长的 URL 看看会怎样——尤其是它有 200 多字符,我不想打开 DevTools。我做了一个免费 URL 编码/解码工具,它完全在浏览器中运行。无需上传、无广告、无需注册。粘贴后直接编码。