关于解决JS在url中传递参数时编码格式的问题
最近在做PC端的项⽬,途中遇到了⼀个问题,就是关于url中传递参数时参数被转换的问题。问题如下:
参数从前⼀个页⾯传递过来的格式:URL?id=3534&catName=今⽇头条
但是需要⽤到参数时拿到的 catName 就变成了 %E4%BB%8A%E6%97%A5%E5%A4%B4%E6%9D%A1 这种 URL 编码形式表⽰的 ASCII 字符(⼗六进制格式);
有兴趣的可以去了解⼀下这篇⽂章。
解决⽅案
1.使⽤ decodeURI(URIString)
2.使⽤ decodeURIComponent(URIString)
经过查阅资料发现 js 对⽂字进⾏编码涉及以下⼏个JavaScript顶层函数:
1.escape(URIstring) 对应解码⽅法 unescape(URIstring)
可对字符串进⾏编码,ECMAScript 不推荐使⽤,推荐使⽤ decodeURI(URIstring) 和 decodeURIComponent(URIstring) 替代它;
encodeURI(URIstring) 函数可把字符串作为 URI 进⾏编码,⽅法的⽬的是对 URI 进⾏完整的编码,因此对以下在 URI 中具有特殊含义的 ASCII 标点符号,en codeURI() 函数是不会进⾏转义的:;/?:@&=+$,#
decodeURI(URIstring) 函数可对 encodeURI(URIstring) 函数编码过的 URI 进⾏解码。url编码处理
把字符串作为 URI 组件进⾏编码,参数必需,⼀个字符串或者含有 URI 组件或其他要编码的⽂本。
encodeURIComponent() 函数可把字符串作为 URI 组件进⾏编码。
注意:
escape()和encodeURI()⼀样不会对 ASCII 字母和数字进⾏编码,也不会对下⾯这些 ASCII 标点符号进⾏编码: * @ - _ + . / 。其他所有的字符都会被转义序列替换。
encodeURIComponent()不会对 ASCII 字母和数字进⾏编码,也不会对这些 ASCII 标点符号进⾏编码: - _ . ! ~ * ’ ( ) 。其他字符(⽐如 :;/??&=+$,# 这些⽤于分隔 URI 组件的标点符号),都是由⼀个或多个⼗六进制的转义序列替换的。
如果 URI 组件中含有分隔符,⽐如 ? 和 #,则应当使⽤ encodeURIComponent() ⽅法分别对各组件进⾏编码。
提⽰:
encodeURIComponent() 函数 与 encodeURI() 函数的区别之处,前者假定它的参数是 URI 的⼀部分(⽐如协议、主机名、路径或查询字符串)。因此 encodeURIComponent() 函数将转义⽤于分隔 URI 各个部分的标点符号。