项目中遇到的 GBK 编码问题,记录如下。
将代码精简为:
<!DOCTYPE HTML>
<html>
<meta charset="gb2312">
<a href='http://huaban.com/search/?q=美腿'> click it </a>
</html>
打开网页中的链接,发现跳转去了莫名其妙的网页。我们看看打开页面的 url:
http://huaban.com/search/?q=%C3%C0%CD%C8
好吧,这是 GBK 的编码问题。"美腿" 的 GBK 编码(url 中 q 后面跟的参数)为 %C3%C0%CD%C8
(http://www.mytju.com/classcode/tools/urlencode_gb2312.asp)
我们在浏览器地址栏输入一个网址的时候,中文会自动被编码,而因为该网页是 GBK 编码的,所以会被编为 GBK 码,而因为浏览器不认识 GBK 的编码,所以以为输入的关键字是 %C3%C0%CD%C8,就打开了这样的一个网页。如果我们用的是 utf-8 编码,就没有这个问题,因为浏览器能识别 utf-8 编码,所以在地址栏中的中文会被自动编码和解码。
那么如果是 GBK 的大环境下,怎么解决这个问题呢?可以把该 url 用 unicode(utf-8)编下码,这样就能在浏览器中自动解码了。
<!DOCTYPE HTML>
<html>
<meta charset="gb2312">
<a href='http://huaban.com/search/?q=美腿'> click it </a>
<script>
var a = document.querySelector('a');
a.setAttribute('href', encodeURI(a.getAttribute('href')));
</script>
</html>