php传递post参数乱码问题,php接收GET方法传入的中文参数乱码深究 | moon's blog

最近写了个简单的页面,从浏览器中传入中文参数(test.

header("Content-Type:text/html;charset=UTF-8");

$name=['name'];

var_dump($name);

?>

测试结果如下:

ad28d06ee2583e6c17d384f83bf4e102.png

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

954b05d189188b323053914561a80e32.png

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

7f243bbd51ce810d5865b58912a7df9e.png

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

header("Content-Type:text/html;charset=UTF-8");

$name=['name'];

var_dump($name);

?>

测试结果,正常显示:

33bcd3c36cfc03e794db927c5f705045.png

那么,是什么导致这个问题的发生呢?

答案是浏览器默认编码在作怪,我们都用的是中文系统,浏览器默认的编码自然也会设置为本地化,例如我自己电脑上的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"gbk","utf-8",$name);

方案2:

$name,"utf-8","gbk");

本文地址:http://www.92csz.com/03/986.html

如非注明则为本站原创文章,欢迎转载。转载请注明转载自:moon's blog

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值