分享一例php代码,可用于判断文件的字符集,并作相应转码,还可以直接检测utf-8的BOM信息。有需要的朋友参考下。 php自定义函数,实现判断字符集并转码功能。原理分析:gb2312/gbk是中文两字节…,

分享一例php代码,可用于判断文件的字符集,并作相应转码,还可以直接检测utf-8的BOM信息。有需要的朋友参考下。

php自定义函数,实现判断字符集并转码功能。

原理分析:
gb2312/gbk是中文两字节,这两个字节是有取值范围的,而utf-8中汉字是三字节,同样每个字节也有取值范围。
英文环境下,不论在何种编码情况下,都是小于128,只占用一个字节(全角除外)。

如果是文件形式的编码检查,还可以直接check utf-8的BOM信息。

下面是这个函数的完整代码,用来对字符串编码进行检查和转码。
例子:
 

<?php  
function safeEncoding($string,$outEncoding ='UTF-8')      
{      
    $encoding = "UTF-8";      
    for($i=0;$i<strlen($string);$i++)      
    {      
        if(ord($string{$i})<128)      
            continue;      
          
        if((ord($string{$i})&224)==224)      
        {      
            //第一个字节判断通过      
            $char = $string{++$i};      
            if((ord($char)&128)==128)      
            {      
                //第二个字节判断通过      
                $char = $string{++$i};      
                if((ord($char)&128)==128)      
                {      
                    $encoding = "UTF-8";      
                    break;      
                }      
            }      
        }      
      
        if((ord($string{$i})&192)==192)      
        {      
            //第一个字节判断通过      
            $char = $string{++$i};      
            if((ord($char)&128)==128)      
            {      
                // 第二个字节判断通过      
                $encoding = "GB2312";      
                break;      
            }      
        }      
    }      
               
    if(strtoupper($encoding) == strtoupper($outEncoding))      
        return $string;      
    else     
        return iconv($encoding,$outEncoding,$string);      
}  
?>