整理一下昨天問大家關於PHP如何判斷是否為utf8編碼文件的方法,以下資料是用
google搜尋到的。
位置: http://ibtaiwan.com/ipb/index.php?showtopic=4035
由於utf8編碼有固定格式,其可能有2~4個字節,我們可以將每一個字節拆開判斷
這個函示僅判斷每個中文字的第一個字節,應該夠了。
請大家看看有沒有問題!

//判斷字串是否為utf8
function  is_utf8($str)  {
    $i=0;
    $len  =  strlen($str);

    for($i=0;$i<$len;$i++)  {
        $sbit  =  ord(substr($str,$i,1));
        if($sbit  <  128)  {
            //本字節為英文字符,不與理會
        }elseif($sbit  >  191  &&  $sbit  <  224)  {
            //第一字節為落於192~223的utf8的中文字(表示該中文為由2個字節所組成utf8中文字),找下一個中文字
            $i++;
        }elseif($sbit  >  223  &&  $sbit  <  240)  {
            //第一字節為落於223~239的utf8的中文字(表示該中文為由3個字節所組成的utf8中文字),找下一個中文字
            $i+=2;
        }elseif($sbit  >  239  &&  $sbit  <  248)  {
            //第一字節為落於240~247的utf8的中文字(表示該中文為由4個字節所組成的utf8中文字),找下一個中文字
            $i+=3;
        }else{
            //第一字節為非的utf8的中文字
            return  0;
        }
    }
    //檢查完整個字串都沒問體,代表這個字串是utf8中文字
    return  1;
}

底下是UTF8每個中文字字節的範圍

Unicode                                      1st  Byte  2nd  Byte  3rd  Byte  4th  Byte
-------------------------------------------------------------------------------
U+0000..007F                           00..7F
U+0080..07FF                           C2..DF       80..BF
U+0800..0FFF                           E0              A0..BF      80..BF
U+1000..CFFF                           E1..EC      80..BF       80..BF
U+D000..D7FF                          ED             80..9F       80..BF
U+E000..FFFF                           EE..EF       80..BF       80..BF
U+10000..3FFFF                        F0             90..BF       80..BF       80..BF
U+40000..FFFFF                        F1..F3       80..BF       80..BF       80..BF
U+100000..10FFFF                    F4             80..8F        80..BF       80..BF


arrow
arrow
    全站熱搜

    yoonow 發表在 痞客邦 留言(0) 人氣()