知道原因了,由于是在客户端浏览器直接输入的文字,因此编码类型不一定与程序中的统一。
我的程序中使用utf-8。而浏览器提交过去的却是gbk,所以造成乱码,并非urldecode所为。那么可以写个方法iconv方法对$_GET数组进行转码。但是,我如何来获知对方提交过来的编码类型呢?总不能总是iconv('GBK','UTF-8',$_GET['xxx']),在网上搜索了下,想根据字符串判断编码类型似乎不那么容易。谁有好的办法?
我的程序中使用utf-8。而浏览器提交过去的却是gbk,所以造成乱码,并非urldecode所为。那么可以写个方法iconv方法对$_GET数组进行转码。但是,我如何来获知对方提交过来的编码类型呢?总不能总是iconv('GBK','UTF-8',$_GET['xxx']),在网上搜索了下,想根据字符串判断编码类型似乎不那么容易。谁有好的办法?
而且,即使用那两个函数也不行,我试过了。看mediawiki的处理方法,拿来凑合用了,只支持两种编码类型的判断,它根据字符串的8个字节,判断出是否是utf-8。function str2utf8( $s ) {
$ishigh = preg_match( '/[\x80-\xff]/', $s);
if(!$ishigh) return $s;
$isutf8 = preg_match( '/^([\x00-\x7f]|[\xc0-\xdf][\x80-\xbf]|[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xf7][\x80-\xbf]{3})+$/', $s );
if( $isutf8 ) return $s;
return iconv('GBK', "utf-8", $s );
}