php接收GET方法传入的中文参数乱码深究
来源:互联网 发布:知世为什么鼓励小狼 编辑:程序博客网 时间:2024/05/22 17:30
最近写了个简单的页面,从浏览器中传入中文参数(test.php?name=测试),不论怎么设置utf-8的页面中都显示乱码,google了一把也查到了不少解决办法,但是问题的原因到底是什么呢?没有人深入研究这个问题。出于好奇便要好好查查到底是什么原因导致,也算涨点经验!
首先先来看下简单的测试代码:
- <?php
- header("Content-Type:text/html;charset=UTF-8");
- $name = $_GET['name'];
- var_dump($name);
- ?>
测试结果如下:
代码中声明了响应内容的编码为utf-8,显示的内容确实乱码。在这里请注意var_dump出变量的长度只有4 ,很显然,两个中文字的长度在utf-8编码下肯定不止4个字节,然后我们再看一下Firefox的访问这个页面url
FireFox会自动将中文url编码,所以我们可以看到测试变成了%B2%E2%CA%D4,很明显,这里一个字是两个字节,是gb2313、gbk等中文编码格式,而不是utf-8编码。如果我们把页面的编码切换为gbk,中文参数就会显示正常,参见下图
接下来我们做另外一个测试,代码如下:
- <?php
- header("Content-Type:text/html;charset=UTF-8");
- $name = $_GET['name'];
- var_dump($name);
- ?>
- <form method="GET">
- <input name="name" />
- <input type="submit" value="输入中文提交" />
- </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:
- $name = iconv("gbk","utf-8",$name);
方案2:
- mb_convert_encoding($name, "utf-8", "gbk");
- php接收GET方法传入的中文参数乱码深究
- php接收GET方法传入的中文参数乱码深究
- php接收GET方法传入的中文参数乱码深究
- PHP教程:PHP接收GET中文参数乱码深入研究
- PHP接收GET中文参数乱码深入研究
- PHP接收GET中文参数乱码深入研究
- PHP接收GET中文参数乱码深入研究
- servlet接收POST提交的中文传入数据库后乱码
- PHP GET参数中文乱码解决
- jquery Ajax get方法 中文参数乱码的问题
- GET方法URL中传递中文参数乱码的解决方法
- get方法传递参数时中文乱码的解决方法
- struts2以GET方式接收的参数是中文时会乱码的解决方法
- Volley get请求上传中文参数,后台接收到的是乱码的解决办法
- Volley get请求上传中文参数,后台接收到的是乱码的解决办法
- GET方法传递中文参数乱码解决办法
- GET方法传递中文参数乱码解决办法
- GET方法传递中文参数乱码解决办法
- 新零售空间数据库实践一例
- android adb devices 后出现offline问题的解决
- Hiberante学习笔记-缓存
- leetcode
- python列表方法
- php接收GET方法传入的中文参数乱码深究
- Vue2 混入mixins
- 3S基础知识:MapInfo点符号的制作方法
- Java web 定时任务
- 排序算法
- void __attribute__((interrupt, no_auto_psv)) _IC1Interrupt (void)//HALLA: input capture device
- 取消老毛桃赞助
- facebook分享之密钥散列获取
- Linux基础知识笔记(二)