由於utf8編碼有固定格式,其可能有2~4個字節,我們可以將每一個字節拆開判斷
這個函示僅判斷每個中文字的第一個字節,應該夠了。
請參考 wikipedia 之 UTF8 說明 ,網址 http://zh.wikipedia.org/zh-tw/UTF8
//判斷字串是否為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;
}
底下是各別中文字字節的範圍
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
文章轉貼至 http://203.68.102.46/online_book/content.php?chapter_sn=172
留言列表