PHP擷取中文字串的問題

2021-04-01 19:12:34 字數 1047 閱讀 5759

以下**試用於gb2312編碼,擷取中文字串是php中乙個頭疼的問題,解決方法是根據值是否大於等於128來判斷是否是雙位元組字元,以避免出現亂碼的情況。但中英文混合、特殊符號等問題總是存在,現在寫乙個比較全面的,僅供參考:

程式說明:

1. len 引數以中文字元為標準,1len等於2個英文本元,為了形式上好看些

2. 如果將magic引數設為false,則中文和英文同等看待,取絕對的字元數

3. 特別適用於用htmlspecialchars()進行過編碼的字串

4. 能正確處理gb2312中實體字元模式(?)

程式**:

function fsubstr($title,$start,$len="",$magic=true)

if($cnum%2 != 0) $start--;

unset($cnum);

}if(strlen($title)<=$len) return substr($title,$start,$len);

$alen   = 0;

$blen = 0;

$realnum = 0;

for($i=$start;$i")

}else if(substr($title,$i,5) == "&")

}else if(substr($title,$i,6) == """)

}else if(substr($title,$i,6) == "'")

}else if(preg_match("/&#(/d+);/i",substr($title,$i,8),$match))

}}else

}elseelse }}

}if($magic)

else

}}else

}unset($cur);

unset($alen);

unset($blen);

unset($realnum);

unset($ctype);

unset($cstep);

return substr($title,$start,$length);

}

PHP擷取中文字串的問題

以下 試用於gb2312編碼,擷取中文字串是php中乙個頭疼的問題,解決方法是根據值是否大於等於128來判斷是否是雙位元組字元,以避免出現亂碼的情況。但中英文混合 特殊符號等問題總是存在,現在寫乙個比較全面的,僅供參考 程式說明 1.len 引數以中文字元為標準,1len等於2個英文本元,為了形式上...

解決PHP擷取中文字串問題

php擷取字串如果是英文那很好辦,直接用substr就行了,一般不會出現亂碼.中文就有點麻煩了.下面給出兩種解決辦法 一 直接使用multi byte函式庫的mb substr 函式就行了,例項 如下 php echo mb substr str start length encoding echo...

PHP 擷取中文字串亂碼問題

function csubstr str,start 0,length,charset utf 8 suffix true xf0 xff x80 xbf re gb2312 x01 x7f xb0 xf7 xa0 xfe re gbk x01 x7f x81 xfe x40 xfe re big5...