多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > php教程 > php怎么截取中文字符串

php怎么截取中文字符串

來源:程序員人生   發布時間:2013-10-16 12:18:30 閱讀次數:3861次

在php中截取字符串最簡單的辦法就是利用substr()函數來實現,但是substr函數只能截取英文,如果是中文就會是亂碼,那么有朋友說可使用mb_substr()來截取,這個方法又不能截取中文英混合的字符。

此函數用于截取gb2312編碼的中文字符串,代碼如下:

  1. <?php  
  2. // 說明:截取中文字符串 
  3. function mysubstr($str$start$len) {  
  4.     $tmpstr = "";  
  5.     $strlen = $start + $len;  
  6.     for($i = 0; $i < $strlen$i++) {  
  7.         if(ord(substr($str$i, 1)) > 0xa0) {  
  8.             $tmpstr .= substr($str$i, 2);  
  9.             $i++;  
  10.         } else 
  11.             $tmpstr .= substr($str$i, 1);  
  12.     }  
  13.     return $tmpstr;  
  14. }  
  15. ?> 

Utf-8、gb2312都支持的漢字截取函數,截取utf-8字符串函數.

為了支持多語言,數據庫里的字符串可能保存為UTF-8編碼,在網站開發中可能需要用php截取字符串的一部分,為了避免出現亂碼現象,編寫如下的UTF-8字符串截取函數

UTF-8編碼的字符可能由1~3個字節組成,具體數目可以由第一個字節判斷出來,理論上可能更長,但這里假設不超過3個字節

第一個字節大于224的,它與它之后的2個字節一起組成一個UTF-8字符,第一個字節大于192小于224的,它與它之后的1個字節組成一個UTF-8字符,否則第一個字節本身就是一個英文字符(包括數字和一小部分標點符號).

代碼如下:

  1. <?php  
  2. // 說明:Utf-8、gb2312都支持的漢字截取函數  
  3.    
  4. /*  
  5. Utf-8、gb2312都支持的漢字截取函數  
  6. cut_str(字符串, 截取長度, 開始長度, 編碼);  
  7. 編碼默認為 utf-8  
  8. 開始長度默認為 0  
  9. */ 
  10.    
  11. function cut_str($string$sublen$start = 0, $code = 'UTF-8')  
  12. {  
  13.     if($code == 'UTF-8')  
  14.     {  
  15.         $pa = "/[x01-x7f]|[xc2-xdf][x80-xbf]|xe0[xa0-xbf][x80-xbf]|[xe1-xef][x80-xbf][x80-xbf]|xf0[x90-xbf][x80-xbf][x80-xbf]|[xf1-xf7][x80-xbf][x80-xbf][x80-xbf]/";  
  16.         preg_match_all($pa$string$t_string);  
  17.    
  18.         if(count($t_string[0]) - $start > $sublenreturn join(''array_slice($t_string[0], $start$sublen))."...";  
  19.         return join(''array_slice($t_string[0], $start$sublen));  
  20.     }  
  21.     else 
  22.     {  
  23.         $start = $start*2;  
  24.         $sublen = $sublen*2;  
  25.         $strlen = strlen($string);  
  26.         $tmpstr = '';  
  27.    
  28.         for($i=0; $i<$strlen$i++)  
  29.         {  
  30.             if($i>=$start && $i<($start+$sublen))  
  31.             {  
  32.                 if(ord(substr($string$i, 1))>129)  
  33.                 {  
  34.                     $tmpstr.= substr($string$i, 2);  
  35.                 }  
  36.                 else 
  37.                 {  
  38.                     $tmpstr.= substr($string$i, 1);  
  39.                 }  
  40.             }  
  41.             if(ord(substr($string$i, 1))>129) $i++;  
  42.         }  
  43.         if(strlen($tmpstr)<$strlen ) $tmpstr.= "...";  
  44.         return $tmpstr;  
  45.     }  
  46. }  
  47.    
  48. $str = "abcd需要截取的字符串";  
  49. echo cut_str($str, 8, 0, 'gb2312');  
  50. ?> 

代碼如下:

  1. function utf8Substr($str$from$len)  
  2. {  
  3.     return preg_replace('#^(?:[x00-x7F]|[xC0-xFF][x80-xBF]+){0,'.$from.'}'.  
  4.                        '((?:[x00-x7F]|[xC0-xFF][x80-xBF]+){0,'.$len.'}).*#s',  
  5.                        '$1',$str);  

可單獨截取uft8字符串。

程序說明:

1. len 參數以中文字符為標準,1len等于2個英文字符,為了形式上好看些

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

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

4. 能正確處理GB2312中實體字符模式

程序代碼:

  1. function FSubstr($title,$start,$len="",$magic=true)  
  2. {  
  3. /**  
  4. * powered by Smartpig  
  5. * mailto:d.einstein@263.net  
  6. */ 
  7. $length = 0;  
  8. if($len == ""$len = strlen($title); 
  9. //判斷起始為不正確位置  
  10. if($start > 0)  
  11. {  
  12. $cnum = 0;  
  13. for($i=0;$i<$start;$i++)  
  14. {  
  15. if(ord(substr($title,$i,1)) >= 128) $cnum ++;  
  16. }  
  17. if($cnum%2 != 0) $start--; 
  18. unset($cnum);  
  19. if(strlen($title)<=$lenreturn substr($title,$start,$len); 
  20. $alen = 0;  
  21. $blen = 0; 
  22. $realnum = 0; 
  23. for($i=$start;$i<strlen($title);$i++)  
  24. {  
  25. $ctype = 0;  
  26. $cstep = 0;  
  27. $cur = substr($title,$i,1);  
  28. if($cur == "&")  
  29. {  
  30. if(substr($title,$i,4) == "<")  
  31. {  
  32. $cstep = 4;  
  33. $length += 4;  
  34. $i += 3;  
  35. $realnum ++;  
  36. if($magic)  
  37. {  
  38. $alen ++;  
  39. }  
  40. }  
  41. else if(substr($title,$i,4) == ">")  
  42. {  
  43. $cstep = 4;  
  44. $length += 4;  
  45. $i += 3;  
  46. $realnum ++;  
  47. if($magic)  
  48. {  
  49. $alen ++;  
  50. }  
  51. }  
  52. else if(substr($title,$i,5) == "&")  
  53. {  
  54. $cstep = 5;  
  55. $length += 5;  
  56. $i += 4;  
  57. $realnum ++;  
  58. if($magic)  
  59. {  
  60. $alen ++;  
  61. }  
  62. }  
  63. else if(substr($title,$i,6) == """)  
  64. {  
  65. $cstep = 6;  
  66. $length += 6;  
  67. $i += 5;  
  68. $realnum ++;  
  69. if($magic)  
  70. {  
  71. $alen ++;  
  72. }  
  73. }  
  74. else if(substr($title,$i,6) == "'")  
  75. {  
  76. $cstep = 6;  
  77. $length += 6;  
  78. $i += 5;  
  79. $realnum ++;  
  80. if($magic)  
  81. {  
  82. $alen ++;  
  83. }  
  84. }  
  85. else if(preg_match("/&#(d+);/i",substr($title,$i,8),$match))  
  86. {  
  87. $cstep = strlen($match[0]);  
  88. $length += strlen($match[0]);  
  89. $i += strlen($match[0])-1;  
  90. $realnum ++;  
  91. if($magic)  
  92. {  
  93. $blen ++;  
  94. $ctype = 1;  
  95. }  
  96. }  
  97. }else{  
  98. if(ord($cur)>=128)  
  99. {  
  100. $cstep = 2;  
  101. $length += 2;  
  102. $i += 1;  
  103. $realnum ++;  
  104. if($magic)  
  105. {  
  106. $blen ++;  
  107. $ctype = 1;  
  108. }  
  109. }else{  
  110. $cstep = 1;  
  111. $length +=1;  
  112. $realnum ++;  
  113. if($magic)  
  114. {  
  115. $alen++;  
  116. }  
  117. }  
  118. if($magic)  
  119. {  
  120. if(($blen*2+$alen) == ($len*2)) break;  
  121. if(($blen*2+$alen) == ($len*2+1))  
  122. {  
  123. if($ctype == 1)  
  124. {  
  125. $length -= $cstep;  
  126. break;  
  127. }else{  
  128. break;  
  129. }  
  130. }  
  131. }else{  
  132. if($realnum == $lenbreak;  
  133. }  
  134. unset($cur);  
  135. unset($alen);  
  136. unset($blen);  
  137. unset($realnum);  
  138. unset($ctype);  
  139. unset($cstep); 
  140. return substr($title,$start,$length);  
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 伊人久久大香线蕉免费视频 | 视频免费视频观看网站 | 暮色大丽菊 | 欧美一区亚洲 | 亚洲婷婷影院 | 精品一区二区三区无卡乱码 | 可以看黄的网址 | 爱爱综合网 | 稀缺资源呦视频在线网站 | 最近的免费中文字幕视频 | 亚洲成人偷拍自拍 | 欧美亚洲一级片 | 日本一本在线 | 日本护士xxxjapanese | 91精品欧美综合在线观看 | 久久精品国产欧美日韩亚洲 | 亚洲成a人片在线观看精品 亚洲成a人片在线观看尤物 | 日韩一区二区久久久久久 | 亚洲视频二 | 亚洲国产高清视频在线观看 | 中文字幕欧美日韩高清 | 一级做a爱片性色毛片武则天五则 | 亚洲综合图片人成综合网 | 国产欧美一区二区三区免费看 | 国产精品99久久久久久夜夜嗨 | 69视频在线免费观看 | 国产欧美一区二区三区免费 | 久久精品国产999久久久 | 久久三级毛片 | 精品一区二区三区四区五区 | 欧美日韩加勒比一区二区三区 | 特级黄色免费片 | 欧美夜夜片a | www.一区二区三区.com | 欧美精品第1页在线播放 | 国产成人a v在线影院 | 18av黄动漫网站在线观看 | 亚欧成人中文字幕一区 | 国产aa网站| 美女牲交视频一级毛片 | 纯欧美一级毛片免费 |