项目中遇到的 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>

GBK 编码时 url 中带中文参数的问题的更多相关文章

  1. get请求url中带有中文参数出现乱码情况

    在项目中经常会遇到中文传参数,在后台接收到乱码问题.那么在遇到这种情况下我们应该怎么进行处理让我们传到后台接收到的参数不是乱码是我们想要接收的到的,下面就是我的一些认识和理解. get请求url中带有 ...

  2. SpringMVC重定向路径中带中文参数

    SpringMVC重定向路径中带中文参数 springboot重定向到后端接口测试 package com.mozq.http.http_01.demo; import org.springframe ...

  3. js的url中传递中文参数乱码,如何获取url中参数问题

    一:Js的Url中传递中文参数乱码问题,重点:encodeURI编码,decodeURI解码: 1.传参页面Javascript代码: <script type=”text/javascript ...

  4. Js的Url中传递中文参数乱码的解决

    一:Js的Url中传递中文参数乱码问题,重点:encodeURI编码,decodeURI解码: 1.传参页面Javascript代码: 2. 接收参数页面:test02.html 二:如何获取Url& ...

  5. IE浏览器url中带中文报错的问题;以及各种兼容以及浏览器问题总结

    1.解决IE浏览器url带中文报错 /* encodeURI()解决IE浏览器请求url中带中文报错的问题 */ URL = encodeURI("<%=basePath%>ve ...

  6. js获取url中的中文参数出现乱码

    解决方法 function getQueryString(key){ var reg = new RegExp("(^|&)"+key+"=([^&]*) ...

  7. url中拼接中文参数,后台接收为乱码的问题

    遇到在URL中拼接中文的参数,后台拿到的数据为乱码的问题,这里来说一下问题出现的原因与解决方法. 大家比较关心的应该是解决的方法,因此先说解决方法. 解决方法 解决的方法是在客户端对这个中文参数进行编 ...

  8. url中传递中文参数时的转码与解码

    URL传递中文参数时的几种处理方式,总结如下: 1.将字符串转码:newString(“xxxxx”.getBytes("iso-8859-1"),"utf-8" ...

  9. 判断URL中的中文参数是GB2312还是Utf-8编码

    如两个URL字符串: &q=%E8%A3%99%E5%AD%90&style=grid&seller_type=taobao &q=%CE%D0%C2%D6%D4%F6 ...

随机推荐

  1. ORACLE AWR报告生成过程出现多个实例记录分析

    在一次生成AWR报告中,发现在"Instances in this Workload Repository schema"部分,出现了多个实例记录信息(host敏感信息被用host ...

  2. 字符集GBK升级UTF8

    在生产环境中,数据库字符集因为各种原因需要升级,比如为了支持汉字,从latin1字符集升级到GBK,后面为了支持多个语言文字,需要将GBK升级到UTF8等.迁移过程网上有很多,我今天主要想讲下字符集转 ...

  3. Servlet/JSP-08 EL表达式

    EL - Expression Language 一. 基本语法 EL表达式以 ${} 的形式访问变量的值 1. "." 和 "[]" 运算符 <%@ p ...

  4. CURL使用方法详解

    php采集神器CURL使用方法详解 作者:佚名  更新时间:2016-10-21   对于做过数据采集的人来说,cURL一定不会陌生.虽然在PHP中有file_get_contents函数可以获取远程 ...

  5. [转] Finding the Best Programmer's Font

    原文 Finding the Best Programmer's Font

  6. 150925-周五不干活-HTML(CSS),Javascript

    不干活就干自己.. 今天所有代码总结为一个如下 <!DOCTYPE HTML><html><head><meta http-equiv="Conte ...

  7. [Top-Down Approach] Chatper 4 Notes

    4.2 Virtual Circuit and Datagram Networks VC Set up connection Exchange data Free the connection The ...

  8. STL vector

    STL vector vector是线性容器,它的元素严格的按照线性序列排序,和动态数组很相似,和数组一样,它的元素存储在一块连续的存储空间中,这也意味着我们不仅可以使用迭代器(iterator)访问 ...

  9. UVALive 5000 Underwater Snipers --二分

    题意:一条河岸线y=k,y>k区域有n个敌人,现在要在y<=k区域布置S个狙击手,狙击手的狙击范围为距离自己半径为D的圆内,问满足能够狙死所有的敌人的情况下,离河岸线最近的那个狙击手的离河 ...

  10. AC日记——石头剪刀布 openjudge 1.6 08

    08:石头剪刀布 总时间限制:  1000ms 内存限制:  65536kB 描述 石头剪刀布是常见的猜拳游戏.石头胜剪刀,剪刀胜布,布胜石头.如果两个人出拳一样,则不分胜负. 一天,小A和小B正好在 ...