博主写好一篇文章,博客后台一般会在搜索页面或者列表页面给出文章标题和截断了的的文章部分作为进一步阅读的入口。
Function: mb_substr( $str, $start, $length, $encoding )
$str,需要截断的字符串
$start,截断开始处
$length,长度(注意,这个跟mb_strimwidth不同,1就代表一个中文字符)
$encoding,编码,我设为 utf-8
例:截断文章标题,控制在15个文字
代码如下 | 复制代码 |
这样对于纯文本没问题,但是我的是中间有html标签的于是问题来了。怎样截断一篇文章。注意,这篇文章不仅仅是普通的字符串文本,而是包含了各种格式化标签和样式内容的文本。如果处理不当,这些闭合标签无法正常关闭,从而破坏整个文档流。
如果单纯是纯文本,下面这个函数差不多是够用的。
代码如下 | 复制代码 |
/** * 字符串截取,支持中文和其他编码 * * @param string $str 需要转换的字符串 * @param string $start 开始位置 * @param string $length 截取长度 * @param string $charset 编码格式 * @param string $suffix 截断字符串后缀 * @return string */ function substr_ext($str, $start=0, $length, $charset="utf-8", $suffix="") { if(function_exists("mb_substr")){ return mb_substr($str, $start, $length, $charset).$suffix; } elseif(function_exists('iconv_substr')){ return iconv_substr($str,$start,$length,$charset).$suffix; } $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)); return $slice.$suffix; } |
但是,如果需要截断是网页中的某部分格式化文本,上面的函数就不够用了。它不具备处理格式化标签的能力。
这时,需要一个新函数,它应该是以上函数的升级加强版,它必须有能力正确的处理标签,下面找到一个
strip_tags() 函数剥去 HTML、XML 以及 PHP 的标签。
例子 1
代码如下 | 复制代码 |
echo strip_tags("Hello world!"); |
输出:
Hello world!
这样就好做了我们只要在上面基础上如下操作
代码如下 | 复制代码 |
$a = strip_tags("Hello world!"); 但是发现html不见了这个也不是什么好的解决办法了。 |
接着google 发现cns写了一个支持html截取字符串的函数
代码如下 | 复制代码 |
/**
/** $pre = chr(1); $strcut = ''; $n = $tn = $noc = 0; $t = ord($string[$n]); if ($noc >= $position) $strcut = substr($string, 0, $n); $pos = strrpos($strcut, chr(1)); |
创造与魔法 安卓版v1.0.0750
创造与魔法是一款开放世界手游,在游戏中玩家可探索这个奇妙的世
创造与魔法修改版 最新版v1.0.0750
创造与魔法无限点券版是款探索冒险游戏,该款游戏的操作还是蛮自
战争与文明官方版本 安卓版v1.7.16
战争与文明是一款由上海邮通科技有限公司开发的战争策略游戏,这
迷你世界0元领皮肤无限迷你币版 最新安卓版v1.43.0
迷你世界0元购买皮肤版是这款开放沙盒冒险建造游戏的特殊破解版
创造与魔法无限经验版 安卓版v1.0.0750
创造与魔法无限经验版是款可以改造环境,整个游戏的自由度还是蛮