php get 显示中文,对php接收到的GET方法接收到的中文乱码进行了深入研究

594b123b59ee57cf5f479cb355d3c087.png

我最近写了一个简单的页面,从浏览器传入中文参数(test.php?name = test),无论如何设置utf-8页面,它都会显示乱码. 解决方案很少,但是问题的原因是什么?没有人深入研究这个问题. 出于好奇php 过滤乱码,有必要确切地找出是什么原因造成的,这也是一个经验点!

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

b0c4c17c7961e9b3fd76d416c33c72bb.gif

测试结果如下:

代码声明响应内容的编码为utf-8,并且显示的内容确实是乱码. 在这里,请注意var_dump输出的变量的长度仅为4. 显然,在utf-8编码下,两个汉字的长度必须大于4个字节. 然后,让我们看一下Firefox的URL来访问此页面

FireFox将自动对中文URL进行编码,因此我们可以看到测试变为%B2%E2%CA%D4. 显然,这里的单词是两个字节,这是中文编码格式,例如gb2313,gbk而不是UTF-8编码. 如果我们将页面的编码切换为gbk,则中文参数将正常显示,请参见下图

2014012620052618394.png

接下来我们进行另一个测试,代码如下:

form>

测试结果,通常显示为:

01deb7f2ef9b3c322b1f388f4e94fdcd.png

那么,什么原因导致了这个问题?

答案是浏览器的默认编码可以解决问题. 我们都使用中文系统. 浏览器的默认编码自然会设置为本地化. 例如,我自己的计算机上IE和FireFox的默认编码均为gb系列.

当浏览器请求用户输入URL时,URL中的中文将以默认编码格式发送,而不是默认以页面编码格式发送. 这就是为什么页面上带有中文的链接正常并且我们手动输入的原因. 链接

fd4a337f133583b440016d8c34838b22.png

字符乱码的原因. 同样,如果将浏览器的默认编码调整为utf-8,则输入URL中的中文将按照utf-8进行编码.

除上述情况外,在以下情况下也会发生这种情况:

如果将由gbk编码的页面生成的地址链接到utf-8页面,则gbk页面的中文将按照gbk格式进行编码并传输到下一页,那么,乱码后肯定会出现乱码utf-8编码已收到.

IIS的URL重写模块. 重写的中文编码也是gbk. 如果您的页面是utf-8编码的php 过滤乱码,则重写参数将无效. 在这种情况下,我们需要使用PHP的内置转码功能来处理编码问题:

选项1:

选项2:

本文地址:

本文来自电脑杂谈,转载请注明本文网址:

http://www.pc-fly.com/a/ruanjian/article-222200-1.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值