程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> PHP截取utf-8字符串的具體方法介紹

PHP截取utf-8字符串的具體方法介紹

編輯:關於PHP編程

我們對關於utf-8的原理請看 UTF-8 FAQ

UTF-8編碼的字符可能由1~3個字節組成, 具體數目可以由第一個字節判斷出來。(理論上可能更長,但這裡假設不超過3個字節)
第一個字節大於224的,它與它之後的2個字節一起組成一個UTF-8字符
第一個字節大於192小於224的,它與它之後的1個字節組成一個UTF-8字符
否則第一個字節本身就是一個英文字符(包括數字和一小部分標點符號)。

以前為某網站設計的代碼(也是現在用在首頁的長度截取的函數)

PHP截取utf-8字符串的代碼示例:

  1. < ?php // Cut_Str;  
  2. //$sourcestr 是要處理的字符串  
  3. //$cutlength 為截取的長度(即字數)  
  4. function cut_str($sourcestr,$cutlength)  
  5. {  
  6. $returnstr=”;  
  7. $i=0;  
  8. $n=0;  
  9. $str_length=strlen($sourcestr);//字符串的字節數  
  10. while (($n<$cutlength) and ($i<=$str_length))  
  11. {  
  12. $temp_str=substr($sourcestr,$i,1);  
  13. $ascnum=Ord($temp_str);//得到字符串中第$i位字符的ascii碼  
  14. if ($ascnum>=224) //如果ASCII位高與224,  
  15. {  
  16. $returnstr=$returnstr.substr($sourcestr,$i,3); 
    //根據UTF-8編碼規范,將3個連續的字符計為單個字符  
  17. $i=$i+3; //實際Byte計為3  
  18. $n++; //字串長度計1  
  19. }  
  20. elseif ($ascnum>=192) //如果ASCII位高與192,  
  21. {  
  22. $returnstr=$returnstr.substr($sourcestr,$i,2);
     //根據UTF-8編碼規范,將2個連續的字符計為單個字符  
  23. $i=$i+2; //實際Byte計為2  
  24. $n++; //字串長度計1  
  25. }  
  26. elseif ($ascnum>=65 && $ascnum<=90) 
    //如果是大寫字母,  
  27. {  
  28. $returnstr=$returnstr.substr($sourcestr,$i,1);  
  29. $i=$i+1; //實際的Byte數仍計1個  
  30. $n++; //但考慮整體美觀,大寫字母計成一個高位字符  
  31. }  
  32. else //其他情況下,包括小寫字母和半角標點符號,  
  33. {  
  34. $returnstr=$returnstr.substr($sourcestr,$i,1);  
  35. $i=$i+1; //實際的Byte數計1個  
  36. $n=$n+0.5; //小寫字母和半角標點等與半個高位字符寬…  
  37. }  
  38. }  
  39. if ($str_length>$cutlength){  
  40. $returnstr = $returnstr . “…”;
    //超過長度時在尾處加上省略號  
  41. }  
  42. return $returnstr;  

以上就是PHP截取utf-8字符串的相關方法總結,希望對大家有所幫助。


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved