程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> php實現中文字符串截取各種問題,

php實現中文字符串截取各種問題,

編輯:關於PHP編程

php實現中文字符串截取各種問題,


用php截取中文字符串會出現各種問題,做一簡單匯總,文中的問題暫時還未解決,有大神解決了問題歡迎指教

 

  1 <?php
  2 
  3 header('Content-Type:text/html;charset=utf-8');//頁面采用utf-8編碼
  4 //header('Content-Type:text/html;charset=gbk');//頁面采用gbk編碼
  5 
  6 /**
  7  * 實現中文截取無亂碼
  8  * @param $str:要截取的字符串
  9  * @param $start:開始位置
 10  * @param $length:截取長度
 11  * @return null|string
 12  */
 13  /*
 14   測試失敗
 15   第一個函數:中文字符串截取會亂碼
 16  */
 17  /*
 18 function GbSubstring($string,$start,$length){
 19     if(strlen($string)>$length){
 20         $str=null;
 21         $len=$start+$length;
 22 
 23         for($i=$start;$i<$len;$i++){
 24             if(ord(substr($string,$i,1))>0Xa0){
 25                 $str.=substr($string,$i,2);
 26                 $i++;
 27 
 28             }else{
 29                 $str.=substr($str,$i,1);
 30             }
 31         }
 32         return $str.'....';
 33     }else{
 34         return $string;
 35     }
 36 
 37 }
 38 
 39 $str1= GbSubstring('哈哈哈你好啊啊',1,3);
 40 echo $str1;
 41 */
 42 
 43 /*
 44  第二個函數測試成功
 45 */
 46 /**
 47  * 適用utf-8
 48  * @param $str
 49  * @param int $start
 50  * @param $length
 51  * @param string $charset
 52  * @param bool|true $suffix
 53  * @return string|void
 54  */
 55 /*
 56 function msubstr($str, $start=0, $length, $charset="utf-8", $suffix=true)
 57 {
 58     if(function_exists("mb_substr"))
 59         return mb_substr($str, $start, $length, $charset);
 60     elseif(function_exists('iconv_substr')) {
 61         return iconv_substr($str,$start,$length,$charset);
 62     }
 63     $re['utf-8']   = "/[x01-x7f]|[xc2-xdf][x80-xbf]|[xe0-xef][x80-xbf]{2}|[xf0-xff][x80-xbf]{3}/";
 64     $re['gb2312'] = "/[x01-x7f]|[xb0-xf7][xa0-xfe]/";
 65     $re['gbk']    = "/[x01-x7f]|[x81-xfe][x40-xfe]/";
 66     $re['big5']   = "/[x01-x7f]|[x81-xfe]([x40-x7e]|xa1-xfe])/";
 67     preg_match_all($re[$charset], $str, $match);
 68     $slice = join("",array_slice($match[0], $start, $length));
 69     if($suffix) return $slice."…";
 70     return $slice;
 71 }
 72 
 73 echo msubstr('哈哈哈你好啊啊',1,3);
 74 */
 75 
 76 /*
 77  第三個函數:測試出錯
 78 */
 79 /**
 80  * @param $string
 81  * @param $start
 82  * @param $length
 83  * @return string
 84  */
 85  /*
 86 function substr2($string, $start, $length)
 87 {
 88     $len = strlen($string);
 89     if($len > $length)
 90     {
 91         $str = '';
 92         $len1 = $start + $length; //截取到原字符串的位置
 93         for($i=$start; $i<$len1; $i++)
 94         {
 95             if(ord(substr($string, $i, 2)) > 0xa0) //在ASCII中,0xa0表示漢字的開始
 96             {
 97                 $str.=substr($string, $i, 2);
 98                 $i++;
 99             }
100             else
101             {
102                 $str.=substr($string, $i, 1);
103             }
104         }
105         return $str.'...';
106     }
107     else
108     {
109         return $string;
110     }
111 }
112 echo substr2('哈哈哈你好啊啊',1,3);
113 */
114 
115 /*
116  第四個函數:測試出錯
117  */
118  /*
119 function chinesesubstr($str, $start, $len){
120     $tmpstr=null;
121     $strlen = $start + $len;
122     for($i=0; $i<$strlen; $i++){
123         if(ord(substr($str, $i, 1)) > 0xa0){
124             $tmpstr .= substr($str, $i, 2);
125             $i++;
126         }else{
127             $tmpstr .= substr($str, $i, 1);
128         }
129     }
130     return $tmpstr;
131 }
132 $str = '哈哈哈你好啊啊';
133 echo chinesesubstr($str, 1,4);
134 */
135 
136 /*
137  系統函數mb_substr測試成功
138 */
139 echo mb_substr('哈哈哈你好啊啊',1,4,"utf-8");
140 
141 ?>

 

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