首页/ 填坑/ 文章详情

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

HentaiCatHentaiCat 2020-12-30 10:22
考科目二全程很紧张,考了三次才过,有次侧方入库直接pass,100分扣完,呜呜呜~
猫猫酱猫猫酱 2020-11-12 10:56
一入多肉深似海,说多都是泪
soulkunsoulkun 2020-11-05 15:54
IconFont的图标真的很好用!!!
无限链霉球菌无限链霉球菌 2020-11-03 11:41
药店,了解一下(`・ω・´)
HentaiCatHentaiCat 2020-11-02 15:28
(ಡωಡ)很实用,直接拿走...