当前位置:首页 > 开发笔记 > 正文内容

msubstr php字符串截取

例子一:
$str = "我是PHP程序员,我爱学PHP";
echo msubstr($str, 2, 8);  
//输出为'PHP程序员'

例子二:
$str = "我是PHP程序员,我爱学PHP";
echo msubstr($str, 0, 5);  
//输出为'我是PHP'

例子三:
$str = "我是PHP程序员,我爱学PHP";
echo msubstr($str, 6, 4);  
//输出为'程序员'
function msubstr($str, $start=0, $length, $charset="utf-8", $suffix=true){  //函数定义
if(function_exists("mb_substr")){   //如果有mb_substr函数
if($suffix){
return mb_substr($str, $start, $length, $charset)."...";  //返回截取后的字符串、省略号
}else{
return mb_substr($str, $start, $length, $charset);  //返回截取后的字符串
}
}elseif(function_exists('iconv_substr')){  //如果有iconv_substr函数
if($suffix){
return iconv_substr($str,$start,$length,$charset)."...";  //返回截取后的字符串、省略号
}else{
return iconv_substr($str,$start,$length,$charset);  //返回截取后的字符串
}
}      //如果两个函数都不存在,说明mbstring和iconv扩展都未安装,那么直接返回字符串
$re['utf-8']    = '/[x01-x7f]|[xc2-xdf][x80-xbf]|[xe0-xef][x80-xbf]{2}|[xf0-xff][x80-xbf]{3}/';  
$re['gb2312']    = '/[x01-x7f]|[xb0-xf7][xa0-xfe]/';
$re['gbk']        = '/[x01-x7f]|[x81-xfe][x40-xfe]/';
$re['big5']      = '/[x01-x7f]|[x81-xfe]([x40-x7e]|\xa1-\xfe])/';  
preg_match_all($re[$charset], $str, $match);   //使用正则表达式匹配需要截取的字符
$slice = join("",array_slice($match[0], $start, $length));   
//使用join函数将匹配结果放在一起,使用array_slice函数截取指定长度的字符串
if($suffix){
return $slice."…";   //返回截取后的字符串、省略号
}else{
return $slice;        //返回截取后的字符串
}
}

从上面的代码中我们可以看出,msubstr()函数的本质原理是通过对字符串的正则匹配,然后使用array_slice()函数来提取指定长度的子字符串。而在这一过程中,如果安装有mbstring和iconv扩展,那么就会直接使用内置函数来处理多字节字符,否则就会采用正则表达式进行截取。

最后要提醒的是,在使用msubstr()函数的时候,由于多字节字符的特殊性,我们需要注意传递的参数,如$length则意味着截取几个字符或者几个字节,并不是截取几个汉字或者几个英文字母。因此,我们在编写代码的时候需要多进行测试,以确保msubstr()函数能够正确地截取出想要的字符串。


“msubstr php字符串截取” 的以下内容与本文无关

简单说两句

访客

◎ 不想说话可以不说,说了便要负责!