知道原因了,由于是在客户端浏览器直接输入的文字,因此编码类型不一定与程序中的统一。
我的程序中使用utf-8。而浏览器提交过去的却是gbk,所以造成乱码,并非urldecode所为。那么可以写个方法iconv方法对$_GET数组进行转码。但是,我如何来获知对方提交过来的编码类型呢?总不能总是iconv('GBK','UTF-8',$_GET['xxx']),在网上搜索了下,想根据字符串判断编码类型似乎不那么容易。谁有好的办法?

解决方案 »

  1.   

    mb_http_input("G")用这个来判断get的编码
      

  2.   

    mb_http_output这个来设置POST和GET的编码
      

  3.   

    谢谢楼上,不过最好不用mb这个扩展,因为我不知道客户的机器上是否支持这个扩展。
    而且,即使用那两个函数也不行,我试过了。看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 );
    }
      

  4.   

    我觉得处理双字节的程序或多或少需要mb这个扩张。但是你如果不用也行。你可以在php.ini里设置着两项。把mb_http_output 设置成utf-8.