encodeURI 与 encodeURIComponent 有什么区别?
在网络通信中,URL 规范(RFC 3986)规定了网址中只有 ASCII 字母、数字和少数保留字符合法。非 ASCII 字符(如中文汉字、空格、表情符号)必须转换为形如 %E6%9C%BA%E5%99%A8 的十六进制百分号编码:
- encodeURIComponent (组件编码):转义除了
A-Z a-z 0-9 - _ . ! ~ * ' ( )之外的几乎所有特殊字符(包括/、?、&、=、:、#)。适用于拼接作为 Query 参数值的子链接,防止子参数中的&或=破坏外部 URL 结构。 - encodeURI (整链编码):仅编码中文和空格等非法字符,保留完整的
http://、路径斜杠/和查询问号?。适用于需要保持网页可直接点击跳转的完整地址。