本文将为大家详细介绍“PHP获取get参数乱码的解决方法”,内容步骤清晰详细,细节处理妥当,而小编每天都会更新不同的知识点,希望这篇“php获取get参数乱码的解决方法”能够给你意想不到的收获,请大家跟着小编的思路慢慢深入,具体内容如下,一
本文将为大家详细介绍“PHP获取get参数乱码的解决方法”,内容步骤清晰详细,细节处理妥当,而小编每天都会更新不同的知识点,希望这篇“php获取get参数乱码的解决方法”能够给你意想不到的收获,请大家跟着小编的思路慢慢深入,具体内容如下,一起去收获新知识吧。
php是一个嵌套的缩写名称,指的是英文超级文本预处理语言(php:Hypertext Preprocessor)的缩写,它的语法混合了C、Java、Perl以及php自创新的语法,主要用来做网站开发,许多小型网站都用php开发,因为php是开源的,从而使得php经久不衰。
php获取get参数乱码的解决办法:1、通过“$str=iconv("gb2312","utf-8",$str);”方式处理编码;2、通过“mb_convert_encoding($str,"utf-8", "gb2312");”方式处理。
PHP接收GET中文参数乱码深入研究
相信很多PHPer都会遇到这样的问题:在utf-8的页面下面,如果直接访问带有中文参数的地址如test.php?s=测试这样的地址输出参数的值会乱码,在搜索引擎上查询了下相关资料,都只给出了一些解决方案,但是却没有人研究导致这个问题的原因,今天特写此文来深入这个问题产生的原因:
首先我们演示这个问题,测试代码和运行结果如下。
代码:
测试结果:
代码中声明了响应内容的编码为utf-8,显示的内容确实乱码。
在这里请注意var_dump出变量的长度只有4,很显然,两个中文字的长度在utf-8编码下肯定不止4个字节
然后我们再看一下Firefox的访问这个页面url
FireFox会自动将中文url编码,所以我们可以看到测试变成了%B2%E2%CA%D4,很明显,这里一个字是两个字节,是gb2313、gbk等中文编码格式,而不是utf-8编码。()
如果我们把页面的编码切换为gbk,中文参数就会显示正常,参见下图
这时一个有趣的问题就诞生了:像emlog的中文标签这样的参数怎么就没有乱码呢?
多方测试后,我发现了一个小小的区别:
emlog中文参数的链接是在页面上生成的,而上面我们测试则用手直接在地址栏输入的,
如果我们直接输入例如Http://be-evil.org/?tag=原创这样的链接,程序同样会提示找不到标签
测试代码如下:
测试结果,正常显示:
请注意上图中红框标出的url编码,这次测试两个字是由6个字节组成,而不是先前的2个字节,因此表明中文参数已经正确的成为utf-8编码。
那么,是什么导致这个问题的发生呢?
答案是浏览器默认编码 在作怪,我们都用的是中文系统,浏览器默认的编码自然也会设置为本地化,例如我自己电脑上的IE的FireFox的默认编码都是gb系列的,请参看下图:
IE的默认设置:
Firefox的默认设置:
正因为这个设置,让浏览器在请求用户输入的url时会默认把url中的中文以默认的编码格式发送而不是以页面的编码格式发送,这就是为什么页面中带有中文的链接正常而我们手动输入的链接会乱码的原因。同理,如果我们把浏览器的默认编码调整为utf-8,那么输入url中的中文则会按照utf-8编码。
除了上面的之外,还有以下情况会出现这种情况:
如果gbk编码的页面生成的地址链接到utf-8的页面,gbk页面的中文是按照gbk的格式编码传送给下个页面,那么utf-8编码接收后肯定会出现乱码。
IIS的url重写模块,重写后的中文编码也是gbk,如果你的页面是utf-8编码,那么重写参数将会失效。
像这些情况,我们就需要使用php内置的转码函数来处理编码问题了:
方案1:
$str =iconv("gb2312","utf-8",$str);
方案2:
mb_convert_encoding($str,"utf-8", "gb2312");
如果你能读到这里,小编希望你对“php获取get参数乱码的解决方法”这一关键问题有了从实践层面最深刻的体会,具体使用情况还需要大家自己动手实践使用过才能领会,如果想阅读更多相关内容的文章,欢迎关注编程网PHP编程频道!
--结束END--
本文标题: php获取get参数乱码的解决方法
本文链接: https://lsjlt.com/news/246865.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0