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
,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截取中文字符串方法
- 用PHP来截取中文字符串而不出现乱码的实现方法
- php 中文字符串截取的函数
- php 中文字符串截取子串
- php截取字符串比较有用的。中英文都可以
- PHP截取字符串编码(兼容utf-8和gb2312)
- php截取html字符串
- php截取字符串
- php 将中文字符串截取为数组
- php截取字符串,兼容utf8、gb2312,gbk、big5
- PHP截取中英混合的字符串
- PHP截取中文字符串方法合集
- php 字符串截取函数
- PHP截取字符串
- PHP基础12-自定义函数截取中文字符串
- PHP按符号截取字符串的指定部分
- php查找字符串中第一个非0的位置截取
- php字符串截取,支持中文和其他编码
- PHP截取中文字符串方法总结
- 转载 PHP 截取字符串专题