您的位置:首页 > 编程语言 > PHP开发

php 截取字符串

2011-06-11 20:08 176 查看
截取字符串的函数,"substr()"不同编码下的中文所占的字节不同,所以截取时要注意,utf-8的每个中文占3个字节,而gb2312下的占两个字节,以下代码是我从其他高手那转过来的,编码兼容性良好的函数,
,01.function cc_msubstr($str, $start=0, $length, $charset="utf-8", $suffix=true)
02.{
03. if(function_exists("mb_substr"))
04. return mb_substr($str, $start, $length, $charset);
05. elseif(function_exists('iconv_substr')) {
06. return iconv_substr($str,$start,$length,$charset);
07. }
08. $re['utf-8'] = "/[/x01-/x7f]|[/xc2-/xdf][/x80-/xbf]|[/xe0-/xef][/x80-/xbf]{2}|[/xf0-/xff][/x80-/xbf]{3}/";
09. $re['gb2312'] = "/[/x01-/x7f]|[/xb0-/xf7][/xa0-/xfe]/";
10. $re['gbk'] = "/[/x01-/x7f]|[/x81-/xfe][/x40-/xfe]/";
11. $re['big5'] = "/[/x01-/x7f]|[/x81-/xfe]([/x40-/x7e]|/xa1-/xfe])/";
12. preg_match_all($re[$charset], $str, $match);
13. $slice = join("",array_slice($match[0], $start, $length));
14. if($suffix) return $slice."…";
15. return $slice;
16.}

PHP获取中英文混合字符串长度的实现代码如下,1中文=1位,2英文=1位,可自行修改

view plaincopy to clipboardprint?
01./**
02.* PHP获取字符串中英文混合长度
03.* @param $str string 字符串
04.* @param $$charset string 编码
05.* @return 返回长度,1中文=1位,2英文=1位
06.*/
07.function strLength($str,$charset='utf-8'){
08.if($charset=='utf-8') $str = iconv('utf-8','gb2312',$str);
09.$num = strlen($str);
10.$cnNum = 0;
11.for($i=0;$i<$num;$i++){
12.if(ord(substr($str,$i+1,1))>127){
13.$cnNum++;
14.$i++;
15.}
16.}
17.$enNum = $num-($cnNum*2);
18.$number = ($enNum/2)+$cnNum;
19.return ceil($number);
20.}
21.
22.//测试输出长度都为15
23.$str1 = '测试测试测试测试测试测试测试测';
24.$str2 = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa';
25.$str3 = 'aa测试aa测试aa测试aa测试aaaaaa';
26.echo strLength($str1,'gb2312');
27.echo strLength($str2,'gb2312');
28.echo strLength($str3,'gb2312');

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/jiutao_tang/archive/2011/04/25/6361696.aspx
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  php 测试 function string join