文章一般都會(huì)有摘要需要維護(hù),一方面是 seo,另一方面還可以滿足一些美觀的要求噩翠,就像這樣:
文章摘要
經(jīng)常希望后臺(tái)維護(hù)好內(nèi)容之后,摘要也能能自動(dòng)生成一個(gè)邦投。
原理就是過濾富文本框生成的 HTML 代碼伤锚,網(wǎng)上找了很多方法都不爽,要么是功能沒達(dá)到要求志衣,要么是復(fù)雜的沒法修改屯援。
那就自己上吧剂娄,雖然看起來簡(jiǎn)單粗暴了一點(diǎn),但是簡(jiǎn)單實(shí)在玄呛,以后還能自己再優(yōu)化下。
function getDescriptionFromContent($content, $count)
{
$content = preg_replace("@<script(.*?)</script>@is", "", $content);
$content = preg_replace("@<iframe(.*?)</iframe>@is", "", $content);
$content = preg_replace("@<style(.*?)</style>@is", "", $content);
$content = preg_replace("@<(.*?)>@is", "", $content);
$content = str_replace(PHP_EOL, '', $content);
$space = array(" ", " ", " ", " ", " ");
$go_away = array("", "", "", "", "");
$content = str_replace($space, $go_away, $content);
$res = mb_substr($content, 0, $count, 'UTF-8');
if (mb_strlen($content, 'UTF-8') > $count) {
$res = $res . "...";
}
return $res;
}
這代碼實(shí)在的不談了和二,由于是插入時(shí)執(zhí)行一次的操作徘铝,所以完全也沒考慮效率,就是簡(jiǎn)單的替換惯吕、替換惕它、替換...
用標(biāo)簽識(shí)別,先把 JS 替換掉:
$content = preg_replace("@<script(.*?)</script>@is", "", $content);
里面的@是定界符废登,這個(gè)可以隨意指定淹魄,這里用@比較好。
is 是修飾符堡距,意思是不區(qū)分大小寫甲锡,并且讓圓點(diǎn)能取代所有字符,包括換行符羽戒。
測(cè)試發(fā)現(xiàn)還是會(huì)換行缤沦,再替換:
$content = str_replace(PHP_EOL, '', $content);
在 windows、linux易稠、mac 里面的換行符都不一樣缸废,好在 PHP 有個(gè)預(yù)定義常量PHP_EOL可以通用。
這都不行驶社,有些頑固的空格還是在企量,再來:
$space = array(" ", " ", " ", " ", " ");
$go_away = array("", "", "", "", "");
$content = str_replace($space, $go_away, $content);
替換所有可能存在的情況,世界終于清靜了亡电。
最后就是mb_substr届巩,截取中文用的。
有個(gè)特殊的地方就是截取的字?jǐn)?shù)只能是3的倍數(shù)逊抡,不然有時(shí)候會(huì)出現(xiàn)某個(gè)字被截了一半的情況姆泻。
END