54SA.COM|专注于系统运维管理,为中国SA提供动力!
Getting online shouldn't be tough. $7.99 .COMs
系统管理员之家Banner
当前位置: 主页 > Linux > PHP4/PHP5 >

PHP通过GET接受URL中文值乱码的原因分析

时间:2011-05-12 10:52来源:未知 编辑:admin

utf-8的编码页面,如果直接在浏览器输入带有中文参数的地址如:test.php?s=中国
这样的地址输出参数的值在页面上会乱码,但是如果是gb编码就正常。

来做个测试看下:

代码:


 
结果:
 

 
可以发现,不设置页面编码,浏览器显示正常,那么如果把页面编码设置成utf8会是怎样呢?看下面:
代码:
 

测试结果:
 

 
发现在IE下出现乱码,S参数的长度为4,很明显是编码问题,我们通过firefox来看看,因为firefox能自动对中文编码.
 

 
可以看到firefox把“中国”编码成了%D6%D0%B9%FA,但是这里一个字是两个字节,是gb2313、gbk等中文编码格式,而不是utf-8编码。
 
分析原因,其实就是浏览器默认编码 在作怪,我们都用的是中文系统,浏览器默认的编码自然也会设置为本地化,一般都会设为GB2312,
除非手动改为UTF8。
用户输入的url 时会默认把url中的中文以GB2312格式发送而不是以页面的编码格式发送,这就是为什么页面中带有中文的链接正常而我们手动输入的链接会乱码的原因。
 
那怎么解决呢?有两个方法:
方法一:PHP iconv函数
使用$s = iconv("gb2312","UTF-8",$s);另一方法代码

方法二:多字节字符串编码转换函数

* @param string str 需要进行编码转换的字符串
* @param string to_encoding 指定转换为某种编码,如:gb2312、gbk、utf-8等
* @param mixed from_encoding 混合指定原来字串的编码,如:同时指定 JIS, eucjp-win, sjis-win 混合编码
* @return string
string mb_convert_encoding ( string str, string to_encoding [, mixed from_encoding] )
 

 

[责任编辑:admin]


关于 的文章
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
用户名:
最新评论 进入详细评论页>>