php接收GET方法传入的中文参数乱码问题

最近做PHP的webService服务器,发现用Get方法获取参数时获取到的参数时乱码。一番折腾后发现时浏览器本地语言的问题。

首先先来看下简单的测试代码:

  1. <?php
  2. header("Content-Type:text/html;charset=UTF-8");
  3. $name = $_GET[‘name‘];
  4. var_dump($name);
  5. ?>

测试结果如下:

代码中声明了响应内容的编码为utf-8,显示的内容确实乱码。在这里请注意var_dump出变量的长度只有4 ,很显然,两个中文字的长度在utf-8编码下肯定不止4个字节,然后我们再看一下Firefox的访问这个页面url

FireFox会自动将中文url编码,所以我们可以看到测试变成了%B2%E2%CA%D4,很明显,这里一个字是两个字节,是gb2313、gbk等中文编码格式,而不是utf-8编码。如果我们把页面的编码切换为gbk,中文参数就会显示正常,参见下图

接下来我们做另外一个测试,代码如下:

  1. <?php
  2. header("Content-Type:text/html;charset=UTF-8");
  3. $name = $_GET[‘name‘];
  4. var_dump($name);
  5. ?>
  6. <form method="GET">
  7. <input name="name" />
  8. <input type="submit" value="输入中文提交" />
  9. </form>

测试结果,正常显示:

那么,是什么导致这个问题的发生呢?
答案是浏览器默认编码在作怪,我们都用的是中文系统,浏览器默认的编码自然也会设置为本地化,例如我自己电脑上的IE和FireFox的默认编码都是gb系列的。
浏览器在请求用户输入的url 时会默认把url中的中文以默认的编码格式发送而不是以页面的编码格式发送,这就是为什么页面中带有中文的链接正常而我们手动输入的链接

会乱码的原因。同理,如果我们把浏览器的默认编码调整为utf-8,那么输入url中的中文则会按照utf-8编码。

除了上面的之外,还有以下情况会出现这种情况:

如果gbk编码的页面生成的地址链接到utf-8的页面,gbk页面的中文是按照gbk的格式编码传送给下个页面,那么utf-8编码接收后肯定会出现乱码。
IIS的url重写模块,重写后的中文编码也是gbk,如果你的页面是utf-8编码,那么重写参数将会失效。像这些情况,我们就需要使用php内置的转码函数来处理编码问题了:

方案1:

  1. $name = iconv("gbk","utf-8",$name);

方案2:

  1. mb_convert_encoding($name, "utf-8", "gbk");
时间: 2024-08-29 02:48:25

php接收GET方法传入的中文参数乱码问题的相关文章

Spring+MVC Controller层接收App端请求的中文参数乱码问题。

在正文之前,说明下Filter的作用: 过滤器顾名思义就是进行过滤的,可以实现代码的定向执行和预处理.通俗点说法filter相当于加油站,request是条路,response是条路,目的地是servlet,这个加油站设在什么地方对什么数据操作可以由你来控制.备注:过滤器可以再请求和响应之前做一部分预处理,有效的过滤掉不需要的内容,而且过滤器可以被复用,节省了大量的复用代码,提高了java的代码执行效率 java的Controller层接收App的请求时,请求的参数是中文,服务器端接收到的是乱码

http中 get方法 传送中文参数乱码解决办法

http传送参数有两种方法:get 和post  当时使用get方法传递中文参数是会有乱码现象 解决办法: 1.在jsp压面url后面的参数使用 encodeURI:"&zxbghy="+ encodeURI(zxbghy) 2.在后台java获取参数时使用字节数组:temphgdmhy = new String(hgdmhy.getBytes("ISO-8859-1"), "UTF-8");  案例,用get方法传递两个中文参数:zxb

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

一:Js的Url中传递中文参数乱码问题,重点:encodeURI编码,decodeURI解码: 1.传参页面Javascript代码: <script type=”text/javascript”> function send(){ var url = "test01.html"; var userName = $("#userName").html(); window.open(encodeURI(url + "?userName="

java url中文参数乱码问题

http://www.blogjava.net/jerry-zhaoj/archive/2009/07/16/286993.html 转 JAVA 中URL链接中文参数乱码的处理方法JAVA 中URL链接中文参数乱码的处理方法 JAVA 中URL链接中文参数乱码的处理方法 在url中问参数乱码,我们已经在 "解决ajax提交中文.URL中文参数传递后的乱码问题的解决办法" 一张提出了一中解决办法, 网子是:http://www.javaly.cn/javahome/java/conte

url中文参数乱码问题

1.问题: web项目里url的中文参数乱码 2.解决: (1)前台:encodeURI(encodeURI(code)) (2)后台:URLDecoder.decode(new String(code.getBytes("iso-8859-1"),"utf-8"), "utf-8") 3.疑问: (1)为什么前台需要编码两次? 因为request.getParameter(String)会进行一次URI的解码过程,调用内置的解码过程会导致乱码

解决url中文参数乱码的问题--解码

<html> <body> <h3 class="projectName" id="projectName"></h3> <script type="text/javascript"> var unitID;    var unitName;    //获取参数的函数    function geturlPara()    {        var url = document.URL;

解决URL带中文参数乱码问题

通过配置Tomcat来解决URL代中文参数乱码的问题. 首先打开Tomcat安装目录 打开conf文件夹 打开server.xml,在大约65行的位置,加一个属性 URIEncoding="UTF-8" 这样就支持Url中文参数了.

spring mvc 中文参数乱码

最近做项目,springmvc的url中文参数乱码: 请求url: http://localhost:8080/supply/supply_list.htm?productName=测试&isHomePage= 在后端: @RequestMapping(value = SupplyURL.SUPPLY_LIST, method = RequestMethod.GET) public String toSupplyList (Model model, String productName) { P

Web中的中文参数乱码

中文参数乱码    1 get方式传参,中文乱码        修改tomcat中的配置server.xml        在修改端口的标签中添加属性URIEncoding="XXX"        <Connector URIEncoding="UTF-8" connectionTimeout="20000" port="8989" protocol="HTTP/1.1" redirectPort=