亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 語言 > PHP > 正文

php怎么截取中文字符串

2024-09-04 11:48:09
字體:
來源:轉載
供稿:網友

在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);  

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产主播精品在线| 一区二区福利视频| 国产精品亚洲аv天堂网| 88xx成人精品| 亚洲三级av在线| 国产性猛交xxxx免费看久久| 日韩日本欧美亚洲| 日本久久久久久久久| 欧美韩日一区二区| 国产精品直播网红| 日韩av在线影院| 精品成人69xx.xyz| 午夜精品视频在线| 不卡av日日日| 久久精彩免费视频| 成年无码av片在线| 在线成人免费网站| 98精品国产自产在线观看| 亚洲国产毛片完整版| 成人精品视频久久久久| 亚洲成人久久电影| 中日韩美女免费视频网站在线观看| 91精品视频在线免费观看| 尤物yw午夜国产精品视频| 久久精品99国产精品酒店日本| 亚洲a∨日韩av高清在线观看| 色婷婷亚洲mv天堂mv在影片| 中文字幕日韩欧美在线视频| xxxxxxxxx欧美| 国产高清视频一区三区| 国产精品 欧美在线| 亚洲网站在线看| 91香蕉嫩草影院入口| 日韩av手机在线观看| 久久深夜福利免费观看| 黑人巨大精品欧美一区二区| 久久久欧美一区二区| 欧美激情xxxx性bbbb| 国产色综合天天综合网| 国产精品一区二区久久国产| 国产日韩欧美在线播放| 亚洲欧美视频在线| 亚洲午夜激情免费视频| 色伦专区97中文字幕| 国产精品久久电影观看| 亚洲欧美日本精品| 国产精品美女999| 久久久精品免费视频| 播播国产欧美激情| 亚洲欧美福利视频| 国产视频观看一区| 97免费在线视频| 日韩午夜在线视频| 日韩精品视频在线观看网址| 亚洲国产精品99久久| 68精品久久久久久欧美| 国产精品99蜜臀久久不卡二区| 欧美一区二区三区四区在线| 亚洲社区在线观看| 欧美日韩一区二区免费视频| 日本道色综合久久影院| 91精品久久久久久| 在线视频中文亚洲| 97免费中文视频在线观看| 热99精品里视频精品| 色综合视频网站| 欧美日韩激情小视频| 久久亚洲精品中文字幕冲田杏梨| 国产亚洲人成网站在线观看| 欧美精品videos| www.亚洲免费视频| 久久九九亚洲综合| 国产成人精品日本亚洲专区61| 久久精品91久久久久久再现| 亚洲人成亚洲人成在线观看| 欧美自拍视频在线观看| 久久精品91久久香蕉加勒比| 日韩av在线播放资源| 精品亚洲一区二区三区在线观看| 国产91成人在在线播放| 欧美午夜电影在线| 亚洲第一免费播放区| 亚洲色图欧美制服丝袜另类第一页| 亚洲国产欧美一区二区三区久久| 日韩av大片在线| 精品久久久久久久久久久久久久| 亚洲国产天堂久久综合网| 91美女片黄在线观看游戏| 亚洲美女av在线| 伊人男人综合视频网| 18性欧美xxxⅹ性满足| 亚洲人成自拍网站| 欧美国产在线视频| 97成人超碰免| 国产精品福利在线观看| 日韩视频免费观看| 欧美午夜久久久| 欧美午夜精品久久久久久浪潮| 久久好看免费视频| 久久国产精品影片| 久久久久国产精品一区| 国产精品wwwwww| 欧美日韩免费在线| 亚洲毛片在线观看.| 国产成人高清激情视频在线观看| 8x拔播拔播x8国产精品| 精品久久久久久久久中文字幕| 在线日韩中文字幕| 国产精品久久久999| 国产视频福利一区| 日韩最新在线视频| 亚洲精品国产欧美| 欧美日韩国产精品一区二区不卡中文| 秋霞av国产精品一区| 中文日韩在线视频| 国产一区二区三区在线免费观看| 操91在线视频| 热久久免费视频精品| 国产香蕉一区二区三区在线视频| 国产精品视频男人的天堂| 精品国产31久久久久久| 久久影院在线观看| 日韩风俗一区 二区| 91视频国产一区| 亚洲综合中文字幕在线观看| 琪琪第一精品导航| 97香蕉超级碰碰久久免费软件| 国产在线精品成人一区二区三区| 日韩精品中文字| 亚洲午夜av电影| 97视频免费在线看| 欧美午夜片在线免费观看| 亚洲美女动态图120秒| 欧美日韩高清区| 亚洲综合在线小说| 国产一区二区三区18| 欧美野外猛男的大粗鳮| 国产精品羞羞答答| 伦理中文字幕亚洲| 国产一区二区在线免费| 日韩欧美成人精品| 日韩欧美国产骚| 欧美日韩中文在线| 亚洲欧美一区二区激情| 久久久噜噜噜久久久| 国产日韩精品在线| 成人xxxx视频| 日韩电影第一页| 欧美自拍视频在线| 97成人在线视频| 中文字幕成人精品久久不卡| 亚洲精品电影网| 中文字幕亚洲图片| 久久精品视频免费播放| 亚洲色在线视频| 91chinesevideo永久地址| 97婷婷涩涩精品一区| 97精品国产91久久久久久| 超在线视频97| 国产成人一区二区| 亚洲国产精品嫩草影院久久| 国产精品av免费在线观看| 日韩欧美一区二区三区| 欧美一区二粉嫩精品国产一线天|