国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > PHP > 正文

多個PHP中文字符串截取函數

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

字符串截取是一個非常常見的編程任務,而往往帶中文的字符串截取會經常用到。雖然不難,但是自己寫函數實現又耗費時間,這里介紹一個比較好用的字符串截取函數,能夠勝任基本的需求了,代碼如下:

  1. <?php 
  2. function sysSubStr($string,$length,$append = false)  
  3. {  
  4.     if(strlen($string) <= $length )  
  5.     {  
  6.         return $string;  
  7.     }  
  8.     else  
  9.     {  
  10.         $i = 0;  
  11.         while ($i < $length)  
  12.         {  
  13.             $stringTMP = substr($string,$i,1);  
  14.             if ( ord($stringTMP) >=224 )  
  15.             {  
  16.                 $stringTMP = substr($string,$i,3);  
  17.                 $i = $i + 3;  
  18.             }  
  19.             elseif( ord($stringTMP) >=192 )  
  20.             {  
  21.                 $stringTMP = substr($string,$i,2);  
  22.                 $i = $i + 2;  
  23.             }  
  24.             else  
  25.             {  
  26.                 $i = $i + 1;  
  27.             }  
  28.             $stringLast[] = $stringTMP;  
  29.         }  
  30.         $stringLast = implode("",$stringLast);  
  31.         if($append)  
  32.         {  
  33.             $stringLast .= "...";  
  34.         }  
  35.         return $stringLast;  
  36.     }  
  37. }  
  38. //Vevb.com 
  39. $string = "簡明現代魔法 —— 專注于互聯網主流的各種技術";  
  40. $length = "27";  
  41. $append = true;  
  42. echo sysSubStr($string,$length,$append);  
  43. // 輸出  
  44. // 簡明現代魔法 —— 專... 
  45. ?> 

截取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. ?> 

截取utf8編碼的多字節字符串:

  1. <?php 
  2. //截取utf8字符串 
  3. function utf8Substr($str$from$len
  4.     return preg_replace('#^(?:[/x00-/x7F]|[/xC0-/xFF][/x80-/xBF]+){0,'.$from.'}'
  5.                        '((?:[/x00-/x7F]|[/xC0-/xFF][/x80-/xBF]+){0,'.$len.'}).*#s'
  6.                        '$1',$str); 
  7. ?> 

UTF-8、GB2312都支持的漢字截取函數:

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 辽宁省| 桃园县| 托克托县| 伊吾县| 丰台区| 昔阳县| 梁平县| 杭锦旗| 昌黎县| 永川市| 百色市| 昌吉市| 肥乡县| 遂川县| 柳河县| 泰来县| 遂川县| 蛟河市| 神池县| 琼海市| 泸西县| 漳平市| 祁连县| 福海县| 衡南县| 高要市| 湘西| 广汉市| 红桥区| 东乌珠穆沁旗| 乐都县| 和龙市| 公安县| 兰州市| 驻马店市| 金塔县| 疏附县| 静海县| 惠来县| 光山县| 郑州市|