我們對關於utf-8的原理請看 UTF-8 FAQ
UTF-8編碼的字符可能由1~3個字節組成, 具體數目可以由第一個字節判斷出來。(理論上可能更長,但這裡假設不超過3個字節)
第一個字節大於224的,它與它之後的2個字節一起組成一個UTF-8字符
第一個字節大於192小於224的,它與它之後的1個字節組成一個UTF-8字符
否則第一個字節本身就是一個英文字符(包括數字和一小部分標點符號)。
以前為某網站設計的代碼(也是現在用在首頁的長度截取的函數)
PHP截取utf-8字符串的代碼示例:
- < ?php // Cut_Str;
- //$sourcestr 是要處理的字符串
- //$cutlength 為截取的長度(即字數)
- function cut_str($sourcestr,$cutlength)
- {
- $returnstr=”;
- $i=0;
- $n=0;
- $str_length=strlen($sourcestr);//字符串的字節數
- while (($n<$cutlength) and ($i<=$str_length))
- {
- $temp_str=substr($sourcestr,$i,1);
- $ascnum=Ord($temp_str);//得到字符串中第$i位字符的ascii碼
- if ($ascnum>=224) //如果ASCII位高與224,
- {
- $returnstr=$returnstr.substr($sourcestr,$i,3);
//根據UTF-8編碼規范,將3個連續的字符計為單個字符- $i=$i+3; //實際Byte計為3
- $n++; //字串長度計1
- }
- elseif ($ascnum>=192) //如果ASCII位高與192,
- {
- $returnstr=$returnstr.substr($sourcestr,$i,2);
//根據UTF-8編碼規范,將2個連續的字符計為單個字符- $i=$i+2; //實際Byte計為2
- $n++; //字串長度計1
- }
- elseif ($ascnum>=65 && $ascnum<=90)
//如果是大寫字母,- {
- $returnstr=$returnstr.substr($sourcestr,$i,1);
- $i=$i+1; //實際的Byte數仍計1個
- $n++; //但考慮整體美觀,大寫字母計成一個高位字符
- }
- else //其他情況下,包括小寫字母和半角標點符號,
- {
- $returnstr=$returnstr.substr($sourcestr,$i,1);
- $i=$i+1; //實際的Byte數計1個
- $n=$n+0.5; //小寫字母和半角標點等與半個高位字符寬…
- }
- }
- if ($str_length>$cutlength){
- $returnstr = $returnstr . “…”;
//超過長度時在尾處加上省略號- }
- return $returnstr;
- }
以上就是PHP截取utf-8字符串的相關方法總結,希望對大家有所幫助。