IE浏览器中URL包含汉字导致URL乱码


本文作者: jsweibo

本文链接: https://jsweibo.github.io/2019/03/31/IE%E6%B5%8F%E8%A7%88%E5%99%A8%E4%B8%ADURL%E5%8C%85%E5%90%AB%E6%B1%89%E5%AD%97%E5%AF%BC%E8%87%B4URL%E4%B9%B1%E7%A0%81/

摘要

本文主要讲述了:

  1. 复现
  2. 原因
  3. 解决方案

正文

复现

示例:

1
2
3
4
5
6
7
8
9
10
11
12
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<body>
<a href="index.html?username=中文">中文</a>
</body>
</html>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<body>
<script>
window.addEventListener('click', function () {
const xhr = new XMLHttpRequest();
xhr.open('GET', 'index.html?username=中文');
xhr.send();
});
</script>
</body>
</html>

原因

  • <a>href特性中,如果 URL 的查询字符串中包含汉字,IE 浏览器直接传输汉字的UTF-8编码,其他浏览器会隐式调用encodeURIComponent()
  • 在 Ajax 的GET请求中,如果 URL 的查询字符串中包含汉字,IE 浏览器直接传输汉字的gbk编码,其他浏览器会隐式调用encodeURIComponent()

解决方案

手动编码

示例:

1
2
3
4
5
6
7
8
9
10
11
12
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<body>
<a href="index.html?username=%E4%B8%AD%E6%96%87">中文</a>
</body>
</html>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<body>
<script>
window.addEventListener('click', function () {
const xhr = new XMLHttpRequest();
xhr.open('GET', 'index.html?username=%E4%B8%AD%E6%96%87');
xhr.send();
});
</script>
</body>
</html>

修改浏览器设置

  1. 打开【Internet 选项】
  2. 切换到【高级】
  3. 勾选【发送 Intranet URL 的 UTF-8 查询字符串】
  4. 勾选【发送非 Intranet URL 的 UTF-8 查询字符串】
  5. 点击【确定】
  6. 重启 IE 浏览器

Intranet URLs

Intranet URLs,中文意思为本地 URL。本地 URL 即本地网站的 URL。IE 浏览器支持用户指定哪些网站为本地网站。

Intranet URLs 配置方法:

  1. 打开 IE 浏览器的 Internet 选项
  2. 切换到安全标签页
  3. 点选本地 Intranet
  4. 点选站点
  5. 点选高级

本文作者: jsweibo

本文链接: https://jsweibo.github.io/2019/03/31/IE%E6%B5%8F%E8%A7%88%E5%99%A8%E4%B8%ADURL%E5%8C%85%E5%90%AB%E6%B1%89%E5%AD%97%E5%AF%BC%E8%87%B4URL%E4%B9%B1%E7%A0%81/


本文对你有帮助?请支持我


支付宝
微信