解决url传参中文乱码问题,使用JS中encodeURIComponent(URL)编码与decodeURIComponent(URL)解码详解

2,137 阅读1分钟

为什么要对url进行编码?

当使用地址栏提交查询参数时,如果不编码,非英文字符会按照操作系统的字符集进行编码提交到服务器,服务器会按照配置的字符集进行解码,所以如果两者不一致就会导致乱码。

JavaScript encodeURIComponent() 函数

定义和用法

encodeURIComponent()  encodeURIComponent()函数可把字符串作为 URI 组件进行编码。

该方法不会对 ASCII 字母和数字进行编码,也不会对这些 ASCII 标点符号进行编码: - _ . ! ~ * ' ( ) 。

其他字符(比如 :;/?:@&=+$,# 这些用于分隔 URI 组件的标点符号),都是由一个或多个十六进制的转义序列替换的。

语法

encodeURIComponent(uri)

参数描述
url必需。一个字符串,含有 URI 组件或其他要编码的文本

示例

this.$router.push({ path: "页面url", query:{ userName:encodeURIComponent(this.name)//中文汉字 } });

JavaScript decodeURIComponent() 函数

定义和用法

decodeURIComponent() 函数可对 encodeURIComponent() 函数编码的 URI 进行解码。

提示: 使用 encodeURIComponent() 方法可以对 URI 进行编码。

语法

decodeURIComponent(uri)

参数描述
url必需。一个字符串,含有编码 URI 组件或其他要解码的文本。

示例

let name = decodeURIComponent(params.userName);

this.userName = decodeURIComponent(name);

以上代码解码了两次,如解码一次还是乱码,那就再解码一次,我就是这么做的

encodeURIComponent / encodeURI编码时要编码两次?

encodeURI使用的是 UTF-8 编码规则来编的,当服务器接收url的参数后会自动解码一次,但自动解码的字符集不一定是UTF-8,字符集不一致时解码会出现乱码。