dedecms重新定义cn_substr函数截取字数的方法(substring截取指定字符之后字符)
温馨提示:这篇文章已超过518天没有更新,请注意相关的内容是否还可用!
dedecms重新定义cn_substr函数截取字数的方法DedeCMS是一款常用的开源CMS系统,其内置的cn_substr函数可以截取指定长度的字符串。但是在实际使用中,我们经常会遇到需要截取指定字符之后的字符串的情况。首先,我们来看一下cn_substr函数的定义:```function cn_substr{if{if(mb_strlen($str, $charset)dedecms重新定义cn_substr函数截取字数的方法
DedeCMS是一款常用的开源CMS系统,其内置的cn_substr函数可以截取指定长度的字符串。但是在实际使用中,我们经常会遇到需要截取指定字符之后的字符串的情况。本文将介绍如何重新定义cn_substr函数来实现这个功能。
首先,我们来看一下cn_substr函数的定义:
```
function cn_substr($str, $start, $length, $charset="utf-8", $suffix=true)
{
if(function_exists("mb_substr"))
{
if(mb_strlen($str, $charset) <= $length)
{
return $str;
}
$slice = mb_substr($str, $start, $length, $charset);
}
else
{
$re['utf-8'] = '/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|\xe0[\xa0-\xbf][\x80-\xbf]|[\xe1-\xef][\x80-\xbf]{2}|\xf0[\x90-\xbf][\x80-\xbf]{2}|[\xf1-\xf7][\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);
if(count($match[0]) <= $length)
{
return $str;
}
$slice = join("",array_slice($match[0], $start, $length));
}
if($suffix && (strlen($slice) < strlen($str)))
{
return $slice.'...';
}
return $slice;
}
```
可以看到,该函数接收五个参数:$str表示要截取的字符串,$start表示起始位置,$length表示要截取的长度,$charset表示字符集,$suffix表示是否显示省略号。
为了实现截取指定字符之后的字符串,我们需要对该函数进行修改。具体方法是:先找到指定字符的位置,然后再调用substr函数来截取字符串。
以下是修改后的代码:
```
function cn_substr($str, $start, $length, $charset="utf-8", $suffix=true, $delimiter='')
{
if(function_exists("mb_substr"))
{
if(mb_strlen($str, $charset) <= $length)
{
return $str;
}
$slice = mb_substr($str, $start, $length, $charset);
}
else
{
$re['utf-8'] = '/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|\xe0[\xa0-\xbf][\x80-\xbf]|[\xe1-\xef][\x80-\xbf]{2}|\xf0[\x90-\xbf][\x80-\xbf]{2}|[\xf1-\xf7][\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);
if(count($match[0]) <= $length)
{
return $str;
}
$slice = join("",array_slice($match[0], $start, $length));
}
$pos = strpos($slice, $delimiter);
if($pos !== false){
$slice = substr($slice, $pos + strlen($delimiter));
}
if($suffix && (strlen($slice) < strlen($str)))
{
return $slice.'...';
}
return $slice;
}
```
我们新增了一个参数$delimiter,用于指定要截取的字符。在函数中,首先调用原来的截取函数来获取子串$slice,然后再用strpos函数查找$delimiter在$slice中的位置,如果找到了,则调用substr函数来截取$slice中$delimiter之后的部分。
使用方法:
```
$str = '这是一段测试文字,我想截取“测试”之后的内容。';
echo cn_substr($str, 0, 10, 'utf-8', true, '测试'); //输出“文字,我想截取“测试”之后的内容。”
```
除了截取指定字符之后的字符串,有时候我们还需要截取指定长度的字符串,并且保证最后一个字符不被截断。这时候可以使用PHP自带的substr函数来实现,例如:
```
function my_substr($str, $len, $suffix=true){
if(mb_strlen($str) <= $len){
return $str;
}
$new_str = substr($str, 0, $len
有云计算,存储需求就上慈云数据:点我进入领取200元优惠券