改造phpcms-v9自带的字符串截取函数
phpcms-v9自带的字符串截取函数在phpcms/libs/functions/global.func.php文件中:
/**
* 字符截取 支持UTF8/GBK
* @param $string
* @param $length
* @param $dot
*/
function str_cut($string, $length, $dot = '...') {
$strlen = strlen($string);
if($strlen <= $length) return $string;
$string = str_replace(array(' ',' ', '&', '"', ''', '“', '”', '—', '<', '>', '·', '…'), array('∵',' ', '&', '"', "'", '“', '”', '—', '<', '>', '·', '…'), $string);
$strcut = '';
if(strtolower(CHARSET) == 'utf-8') {
$length = intval($length-strlen($dot)-$length/3);
$n = $tn = $noc = 0;
while($n < strlen($string)) {
$t = ord($string[$n]);
if($t == 9 || $t == 10 || (32 <= $t && $t <= 126)) {
$tn = 1; $n++; $noc++;
} elseif(194 <= $t && $t <= 223) {
$tn = 2; $n += 2; $noc += 2;
} elseif(224 <= $t && $t <= 239) {
$tn = 3; $n += 3; $noc += 2;
} elseif(240 <= $t && $t <= 247) {
$tn = 4; $n += 4; $noc += 2;
} elseif(248 <= $t && $t <= 251) {
$tn = 5; $n += 5; $noc += 2;
} elseif($t == 252 || $t == 253) {
$tn = 6; $n += 6; $noc += 2;
} else {
$n++;
}
if($noc >= $length) {
break;
}
}
if($noc > $length) {
$n -= $tn;
}
$strcut = substr($string, 0, $n);
$strcut = str_replace(array('∵', '&', '"', "'", '“', '”', '—', '<', '>', '·', '…'), array(' ', '&', '"', ''', '“', '”', '—', '<', '>', '·', '…'), $strcut);
} else {
$dotlen = strlen($dot);
$maxi = $length - $dotlen - 1;
$current_str = '';
$search_arr = array('&',' ', '"', "'", '“', '”', '—', '<', '>', '·', '…','∵');
$replace_arr = array('&',' ', '"', ''', '“', '”', '—', '<', '>', '·', '…',' ');
$search_flip = array_flip($search_arr);
for ($i = 0; $i < $maxi; $i++) {
$current_str = ord($string[$i]) > 127 ? $string[$i].$string[++$i] : $string[$i];
if (in_array($current_str, $search_arr)) {
$key = $search_flip[$current_str];
$current_str = str_replace($search_arr[$key], $replace_arr[$key], $current_str);
}
$strcut .= $current_str;
}
}
return $strcut.$dot;
}
//weiyanhui自己添加,字符串截取函数,建议使用自己写的字符串截取函数,需要在php.ini中开启php_mbstring.dll扩展
function str_cut1($string, $length, $dot = '...') {
return mb_substr($string,0,$length,'utf-8').$dot;
}echo str_cut1("abcdefg",3,"...");//结果:abc...
echo str_cut1("我们都是中国人",3,"...");//结果:我们都...
不管是字母还是中文,都截取指定的长度。
上一篇:phpcms v9 下拉菜单 二级 三级子栏目调用方法
栏 目:PHPCMS
下一篇:PHPCMS v9定时发布的简单实现方法[支持静态生成]
本文地址:https://zz.feitang.co/CMSjiaocheng/26366.html
您可能感兴趣的文章
- 11-16phpcms全站最新文章和随机文章
- 11-16PHPCMS v9远程附件功能
- 11-16PHPCMS V9相关文章自动调用的实现方法
- 11-16PHPCMS V9 ckeditor编辑器代码高亮显示(附插件)
- 11-16phpcms v9取组图的第一张或第N张图为缩略图
- 11-16phpcms v9如何更改分页显示条数?
- 11-16Phpcms V9单页添加自定义字段
- 11-16PHPCMS V9静态化HTML生成设置及URL规则优化
- 11-16PHPCMS V9 全站通用日期时间标签
- 11-16phpcms v9调用多个栏目下文章的方法


阅读排行
推荐教程
- 09-22phpcms是什么框架
- 09-22phpcms手机端如何取消伪静态
- 11-12phpcms如何使用水印功能
- 11-12phpcms不限制模型进行全站搜索
- 11-12phpcms栏目标签调用代码大全
- 11-12phpcms二次开发用拼音作为tags列表页路径的方法
- 11-12如何用phpcms调取指定位置的新闻列表
- 11-16Phpcms V9列表分页自定义页码文字(改成中文)
- 11-16phpcms ajax列表分页加载更多
- 11-16Phpcms v9翻页增加下拉跳转的自定义方法





