昨天编码发现GET方式传递中文字符,后台接收之后显示乱码,换了chrome和Firefox浏览器均无此现象。经网络多方查询,分析是IE浏览器传递参数时采用编码为gb2312,而后台编码格式为UTF8,因此出现乱码。
综合网上多位同学的方案,最后采用如下方式得以解决:(PHP语言). getBrowser函数为网络搜索得到,忘记出处无法注明,见谅。
$browser = getBrowser();
if ($browser[0] == "Internet Explorer" ) {
$xx= iconv("gb2312","utf-8", $xx);
// 或者 $xx= mb_convert_encoding($xx,"utf-8", "gb2312");
}
//查询浏览器类型,返回的数组第一个为浏览器名称,第二个是版本号。
function getBrowser(){
$sys = $_SERVER['HTTP_USER_AGENT'];
if(stripos($sys, "NetCaptor") > 0){
$exp[0] = "NetCaptor";
$exp[1] = "";
}elseif(stripos($sys, "Firefox/") > 0){
preg_match("/Firefox\/([^;)]+)+/i", $sys, $b);
$exp[0] = "Mozilla Firefox";
$exp[1] = $b[1];
}elseif(stripos($sys, "MAXTHON") > 0){
preg_match("/MAXTHON\s+([^;)]+)+/i", $sys, $b);
preg_match("/MSIE\s+([^;)]+)+/i", $sys, $ie);
// $exp = $b[0]." (IE".$ie[1].")";
$exp[0] = $b[0]." (IE".$ie[1].")";
$exp[1] = $ie[1];
}elseif(stripos($sys, "MSIE") > 0){
preg_match("/MSIE\s+([^;)]+)+/i", $sys, $ie);
//$exp = "Internet Explorer ".$ie[1];
$exp[0] = "Internet Explorer";
$exp[1] = $ie[1];
}elseif(stripos($sys, "Netscape") > 0){
$exp[0] = "Netscape";
$exp[1] = "";
}elseif(stripos($sys, "Opera") > 0){
$exp[0] = "Opera";
$exp[1] = "";
}elseif(stripos($sys, "Chrome") > 0){
$exp[0] = "Chrome";
$exp[1] = "";
}else{
$exp = "未知浏览器";
$exp[1] = "";
}
return $exp;
}
本文介绍了一种解决Internet Explorer浏览器GET请求中中文字符乱码的问题。通过对IE浏览器发送的gb2312编码数据转换为UTF-8,实现了跨浏览器兼容性。文中提供了一个PHP示例代码用于自动检测浏览器类型并进行相应的编码转换。
4062

被折叠的 条评论
为什么被折叠?



