为什么PHP中GET值乱码?

网上搜索了半天,大部分童鞋文中写到的都是通过转码,具体方法如下:

header("Content-Type: text/html; charset=utf-8");
$str = trim($_GET['name']); 

//$str = iconv("GB2312","UTF-8",$str);
$str = mb_convert_encoding($str, "UTF-8", "GB2312");

echo $str;

问题还没解决咧,接下来看测试文字:

綿部なつみ

试问一下,GET传递值跟网页的编码有关系吗?

没关系,乱码是url传值产生的,而不是字体本身编码的问题。

header("Content-Type: text/html; charset=utf-8");
$str = trim($_GET['name']); 
$str=urlencode($str);
 
$str=urldecode($str);
echo $str;

GET传值之前用urlencode编码一下,传过去再用urldecode解码。

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

答案是浏览器默认编码在作怪,我们都用的是中文系统,浏览器默认的编码自然也会设置为本地化,例如我自己电脑上的IE的FireFox的默认编码都是gb系列的。

Leave a Reply