首页 > 营销分享 > 提取摘要不应该截断单词

提取摘要不应该截断单词

在优化推广过程中,经常会需要对文章或者产品的内容进行提取指定长度摘要的操作,用来生成网页的description或其他描述功能。生成指定长度摘要一方面用来满足指定长度的数据存储要求,另一方面可以根据需要生成符合SEO要求描述文字,还可以兼顾网页排版需要,是所有网站制作都必须要使用的常规操作。

很多人在用程序对字符串进行提取摘要的操作非常简单,直接使用substr或者mb_substr或其他类似字符串截取操作,这样的操作简单直接,并没有什么大的问题,尤其是在中文营销推广中,没有什么问题。因为对于中文,日语,韩语等这种表意文字而言,单个字符即有意义;而对于英语,西班牙语,俄语,法语等其他一些国际通用的语言来说,这样的操作很容易截断单词,稍显不完美。

没有截取单词的Google搜索结果

Domai CMS可以通过dm_trim_word函数截取字符串,接收三个参数,第一个为要截取的字符串,第二个长度,第三个为截取之后的提示字符,默认为省略号。在刚开始,系统直接使用mb_substr进行简单截取,但考虑到某些环境可能没有安装mbstring扩展,加上对单词进行截取并不完美,所以系统了字符串截取功能,支持中文和其他语言的字符串截取,摘要提取等功能,这里共享一下此函数,供参考学习:

/*
 * 截取指定内容的文字片段,用于在HTML页面展示
 * 不能破坏单词,但会对超长单词进行截取,默认为最长为15个字符
 *
 * @param $string string 指定的字符串
 * @param $maxlen int  最大字符长度
 * @param $more string 更多提示
 */
function dm_trim_words($string, $maxlen, $more='…'){
    //删除所有html标签
    $string = dm_strip_all_tags($string);

    //转化实体字符
    $string = html_entity_decode($string, ENT_QUOTES);

    //替换空格
    $string = preg_replace('#[\x{00a0}\x{1680}\x{180e}\x{2000}-\x{200d}\x{202f}\x{205f}\x{3000}\x{feff}\r\n\t\s]+#siu', ' ', $string);

    if(dm_strlen($string) <= $maxlen)
        return $string;

    $words_array = preg_split('/\b/u', $string, -1, PREG_SPLIT_NO_EMPTY);
    $countlen = 0;
    foreach($words_array as $index=>$words){
        $charlength = dm_strlen($words);
        $countlen += $charlength;
        if($countlen >= $maxlen)
            break;
    }

    $words_array = array_slice($words_array, 0, $index);
    $returnstring = implode('', $words_array);

    if($charlength > 15){
        $leftlength = $maxlen - dm_strlen($returnstring);
        $leftword = dm_substr($words, 0 ,$leftlength);
        $returnstring = $returnstring.$leftword;
    }

    return trim($returnstring).$more;
}


上一篇: 哆麦CMS让网站支持Yandex Turbo pages网页加速技术 下一篇: 短命的百度MIP
38人阅读过这篇文章,6人喜欢。

发表评论

评论列表

  • 涛哥小弟:小涛哥

    涛哥小弟:小涛哥 2020-05-05 19:50:10