您的位置 首页 php

ThinkPHP之去掉文章中的所有HTML标签并截取部分内容作为简介

为了让初学者更容易理解,本文写的比较详细,所以如果你已是技术大拿,请直接绕过,以免浪费你的宝贵时间,谢谢。

相信现在很多网站都有文章功能,有文章就基本上少不了要有个列表页,网页设计师们对文章列表页的设计也是五花八门,各有各的创意,那我们就拿 ThinkPHP 旗下的极思维平台的列表页来说,极思维的目前的列表页是这样的:

3f2900011d2ef687741d

大家可以看到,它的布局是块形式展现,每篇文章都是固定的布局,图片,标题,简介,如果说每篇文章在发布的时候都要单独的写个简介,单独上传个封面图,对编辑者来说就有些麻烦了,那我们就可以通过程序让它自动去抓取封面和简介,自动抓取缩略图我在之前的文章有讲过,大家可以去找下我之前的 《ThinkPHP之自动获取文章内容中的第一张图片做为缩略图》 这篇文章,今天我们主要讲如何自动抓取文章的部分内容作为文章的简介。

我们先来分析一下功能的实现原理,所谓简介,就是简单的说明一下这篇文章的主要内容,不涉及到排版,所以我们只需要纯文字,那么问题来了,之前我们在抓取缩略图的文章中我们也有说到,文章内容是由编辑器进行排版的,既然有排版样式,就必定要有 HTML 样式,只要保留文字就得把所有的HTML标签都去掉,那怎么去掉呢?

不用急,PHP有个专门去掉HTML的函数,这个函数就是 strip_tags ,我们先来看一下这个函数是什么样的:

3f2900017f18bc9790b7

在以上代码中可以看到,内容中有个 <b> 标签, <b> 标签的作用就是字体加粗,我们运行一下实例看下:

3f280001808af78dea93

可以很明显的看到使用了 strip_tags 函数和没使用 strip_tags 函数的区别,那是不是直接在ThinkPHP中用这个函数就够了呢,写过文章的人都知道,文章会涉及到换行、空格等格式, strip_tags 函数只能去掉HTML标签,并不能去掉换行、空格等格式,那么怎么样才能去掉换行和空格呢,别担心,强大的PHP也有函数来处理这些东西的,PHP中有个正则替换函数叫做 ereg_replace ,这个函数可以把指定的字符换成我们想要的字符,那么我们的逻辑代码就可以这样写:

3f2500049c0480cbd5df

从上面的逻辑代码中,我们可以看到替换换行符中处理了三次替换,这是为什么呢,因为现在 服务器系统 有很多种,最常用的就有windows、linux两种系统,这两种系统的换行符是不同的,所以为了兼容不同的服务器,我们就多替换几次,其中 \r\n 是替换 linux 和 unix 系统的换行符, \n 是替换 windows 系统的换行符, \r 是替换苹果系统的换行符的。

处理好了HTML之后,接下来我们就要截取内容了,因为文章字数有多有少,既然是简介,那我们肯定就只要截取一小段文字了,比如只要50个字或者100个字这样,因为编程基本都是用英文编写的,对中文的识别较差,所以在编程计算长度时,一个中文汉字是算两个字符的,所以如果我们要截取50个中文的话,截取长度就是乘以二,那就是100了,其实这都不算什么问题,但是在实际过程中,按这样的方式去截取的话,遇到文章包含中英文的时候就可能会出现乱码的情况,为了避免出现乱码,我们可以用一个非PHP核心函数 mb_strlen 来解决,为什么说 mb_strlen 是非PHP核心函数呢,因为在使用 mb_strlen 函数前需要确保在 php.ini 中有加载 php_mbstring.dll ,要不然就会出现 未定义函数 的问题,那我们就来把上面的代码改进一下,加上截取字数的功能,得到代码如下:

3f270001b41c733d339a

然后,我们以 ThinkPHP3.2 为例,把上面的自定义函数方法添加到ThinkPHP框架中 核心公共函数目录(Common) 里的 functions.php 文件的最后面即可。

调用方法为: {$vo.content|cutstr_html=###,100}

上面调用方法中的 ### 是表示文章内容,100为要截取的字数长度。

谢谢你的阅读,如果你有更好的方法或在应用过程中遇到问题可以在评论区提问或者直接私信我,我会定期回复,码农刘小桥与你一起学习,共同进步。

文章来源:智云一二三科技

文章标题:ThinkPHP之去掉文章中的所有HTML标签并截取部分内容作为简介

文章地址:https://www.zhihuclub.com/31700.shtml

关于作者: 智云科技

热门文章

网站地图