用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 ?>

 

内容来源于网络如有侵权请私信删除
你还没有登录,请先登录注册
  • 还没有人评论,欢迎说说您的想法!

相关课程