关于PHP自动判断字符集并转码的详解_PHP教程

WBOY
Lepaskan: 2016-07-21 15:02:52
asal
1319 orang telah melayarinya

原理很简单,因为gb2312/gbk是中文两字节,这两个字节是有取值范围的,而utf-8中汉字是三字节,同样每个字节也有取值范围。而英文不 管在何种编码情况下,都是小于128,只占用一个字节(全角除外)。
如果是文件形式的编码检查,还可以直接check utf-8的BOM信息。话不多说,直接上函数,这个函数是用来对字符串进行检查和转码的。

复制代码 代码如下:

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

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/327896.htmlTechArticle原理很简单,因为gb2312/gbk是中文两字节,这两个字节是有取值范围的,而utf-8中汉字是三字节,同样每个字节也有取值范围。而英文不 管在...
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!