关于解决JS在url中传递参数时编码格式的问题

最近在做PC端的项目,途中遇到了一个问题,就是关于url中传递参数时参数被转换的问题。

问题如下:

	参数从前一个页面传递过来的格式:URL?id=3534&catName=今日头条
	但是需要用到参数时拿到的 catName 就变成了 %E4%BB%8A%E6%97%A5%E5%A4%B4%E6%9D%A1 这种 URL 编码形式表示的 ASCII 字符(十六进制格式);		

有兴趣的可以去了解一下这篇文章。关于URL编码

解决方案

	1.使用 decodeURI(URIString)
	2.使用 decodeURIComponent(URIString)

经过查阅资料发现 js 对文字进行编码涉及以下几个JavaScript顶层函数:

1.escape(URIstring) 对应解码方法 unescape(URIstring)
	可对字符串进行编码,ECMAScript 不推荐使用,推荐使用 decodeURI(URIstring) 和 decodeURIComponent(URIstring) 替代它;
	
2.encodeURI(URIstring) 对应解码方法 decodeURI(URIstring)
	encodeURI(URIstring) 函数可把字符串作为 URI 进行编码,方法的目的是对 URI 进行完整的编码,因此对以下在 URI 中具有特殊含义的 ASCII 标点符号,encodeURI() 函数是不会进行转义的:;/?:@&=+$,#
	decodeURI(URIstring) 函数可对 encodeURI(URIstring) 函数编码过的 URI 进行解码。
	
3.encodeURIComponent(URIstring) 对应解码方法  decodeURIComponentstring(URIstring)
	把字符串作为 URI 组件进行编码,参数必需,一个字符串或者含有 URI 组件或其他要编码的文本。
	encodeURIComponent() 函数可把字符串作为 URI 组件进行编码。

注意:
escape()和encodeURI()一样不会对 ASCII 字母和数字进行编码,也不会对下面这些 ASCII 标点符号进行编码: * @ - _ + . / 。其他所有的字符都会被转义序列替换。

encodeURIComponent()不会对 ASCII 字母和数字进行编码,也不会对这些 ASCII 标点符号进行编码: - _ . ! ~ * ’ ( ) 。其他字符(比如 :;/??&=+$,# 这些用于分隔 URI 组件的标点符号),都是由一个或多个十六进制的转义序列替换的。

	如果 URI 组件中含有分隔符,比如 ? 和 #,则应当使用 encodeURIComponent() 方法分别对各组件进行编码。

提示:
encodeURIComponent() 函数 与 encodeURI() 函数的区别之处,前者假定它的参数是 URI 的一部分(比如协议、主机名、路径或查询字符串)。因此 encodeURIComponent() 函数将转义用于分隔 URI 各个部分的标点符号。

你可能感兴趣的:(JavaScript,JavaScript)