一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

PHP自动识别字符集编码并完成转码

时间:2013-11-19 编辑:简简单单 来源:一聚教程网

在PHP处理页面的时候,我们对于字符集的转换都是采用了iconv或者mb_convert等函数,但,这其实是有一个前提的。即我们事先得知道in和out是什么样的编码,我们才能进行正确的转换。
下面这个函数,就可以在不知道源字符串编码的情况下,自动判断其编码并进行转换。虽然只支持UTF8编码和GB2312编码,但对于国内绝大多数网站来说,已经够用了。

 代码如下 复制代码


function safeEncoding($string,$outEncoding = 'UTF-8')
{
    $encoding = "UTF-8";
    for($i=0;$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);
}

例2

 代码如下 复制代码


    //识别汉字编码,因为YBlog用的是utf-8,如果引用通告发过来的是gb2312的编码的话,需要可以识别并完成编码转换 
    function safeEncoding($string,$outEncoding = 'UTF-8') 
    { 
        $encoding = "UTF-8"; 
        for($i=0;$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); 
    }

热门栏目