首页要知道的:
1、中文字符在gbk编码下占2个字节,在utf-8编码下占3个字节
2、ord()
函数返回字符串第一个字符的 ASCII 值
3、中文字符的ASCII值是大于0xa0。
关键的点是判断要截取的字符串是中文字符还是英文字符,用ord(substr($str,$start,1))>0xa0可判断,大于则是中文,否则是英文。实现代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
<?php /* *param $str 要截取的字符串。 *param $start 从第几个开始截取,0为第一个。 *param $length 要截取的个数,默认为空,则从$start开始截取到最后一个。 *param $bite 中午字符的字节长度,默认是gbk编码,填写为2,如果是utf-8编码,则填写为3. */ functionmy_substr($str,$start,$length="",$bite=2){ $pos=0; //用来计算在字符串截取的字节位置 //下面这段for循环用来计算在字符串开始截取的位置 for($i=0;$i<$start;$i++){ if(ord(substr($str,$i,1))>0xa0){ $pos+=$bite;//如果是中文字符,则位置加上中午字符长度; }else{ $pos+=1; } } if($length==""){ returnsubstr($str,$pos);//如果$length为空,则从开始截取到最后一个 }else{ if($length<0){ $length=0; } $string=""; for($i=1;$i<=$length;$i++){ if(ord(substr($str,$pos,1))>0xa0){//如果是中午字符, $string.=substr($str,$pos,$bite);//就要根据中午字符长度来截取 $pos+=$bite; }else{ $string.=substr($str,$pos,1); $pos+=1; } } return$string; } } $str="a这是一段中文"; echomy_substr($str,0);//从第一个开始输出到最后一个。 echo"<br>"; echomy_substr($str,0,1);//输出a; echo"<br>"; echomy_substr($str,1,2);//输出这是; echo"<br>"; //echo my_substr($str,1,2,3);//如果是utf-8编码,最后一个参数修改为3; ?> |
5月3日股市分析预测【新人炒股入门知识】:http://licai.daiyuline.com/gupiao/330.html
大反弹会不会于今日上演【带鱼投资理财】:http://licai.daiyuline.com/gupiao/329.html