首页/ 填坑/ 文章详情

PHP 根据文章自动生成纯文本摘要

PHP 字符串截取 中文乱码 纯文本 发布于 2020-11-03

一个文章由文本、图片、视频、音乐和超级链接等组成。根据文章而获取文章的纯文本摘要,从文章上到下,将其它非文本的元素一一摘除。

分析非文本元素,归根结底它们均属于HTML标签, 可以使用 strip_tags 函数可以快速移除,无须正则表达式过滤。

获取纯文本函数

PHP public function getPlainText($text) {
    $text = stripslashes($text); //没有启用 addslashes 函数,可以不需要这句
    $text = preg_replace('/ nbsp;/is','',$text);
    $text = strip_tags($text); //移除HTML、XML 以及 PHP 的标签
    return $text;
}

获取纯文本后,输出文件,可以用 css 样式隐藏多余的文本。

对于 seo 优化来说,隐藏的文本并不是好主意,严重的情况下会被搜索引擎惩罚。对于多余的文本,我们需要对文本进行字符串截取。

相对于英文字符串截取,含有中文字符串截取要复杂点。在使用UTF-8字符集,英文字符占1个字符,中文字符占3个字符,直接使用 strlen 函数获取的字符串长度变得不准确了。

截取Utf8字符串函数

PHP public function substrUtf8($str, $length = 120, $sign='...', $start = 0) {
    if(strlen($str) < $length) {
        return $str;
    }

    $chars = $str; $i = 0; $m = 0; $n = 0;
    do {
         if (preg_match ("/[0-9a-zA-Z]/", @$chars[$i])){//纯英文
              $m++;
         } else { //非英文字节
             $n++;
         }
         $k = $n/3+$m/2;
         $l = $n/3+$m;//最终截取长度;$l = $n/3+$m*2?
         $i++;
    } while ($k < $length);

    $str1 = mb_substr($str,$start,$l,'utf-8');//保证不会出现乱码
    return $str1.$sign;
}

在字符串截取中,截取不当的中文会出现乱码。因此需要区分好中文与英文的字符长度,保证截取字符串后, 不出现乱码现象。

文章评论0 records

最新 最早

0

最新评论Latest comments

凡心的仙人凡心的仙人 03-18 14:35
谢谢你了!
rantrismrantrism 2023-04-03 11:27
您好~我是腾讯云开发者社区运营,关注了您分享的技术文章,觉得内容很棒,我们诚挚邀请您加入腾讯云自媒体分享计划。完整福利和申请地址请见:https://cloud.tencent.com/developer/support-plan 作者申
唐牛才是食神唐牛才是食神 2022-06-15 10:51
(*°▽°*)八(*°▽°*)♪,解决了
唐牛才是食神唐牛才是食神 2022-06-15 10:49
发现不得了的东西,今晚回去好好研究下...
胖螺胖螺 2022-02-04 00:58
( ゜- ゜)つロ 在写了在写了。看到也有些感慨。因为站长前年在我原博客的留言,让我毅然选择去深造,选择读研,曾经我想过挺多东西的,还是自己本专业的适合我自己。在这先表达感谢。新年快乐!