/**
* 获取前N个字符
* @param string $content
* @param int $count
* @return string
*/
public function getWords($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;
}用标签识别,先把 JS 替换掉:$content = preg_replace("@<sc
里面的@是定界符,这个可以随意指定,这里用@比较好。
is 是修饰符,意思是不区分大小写,并且让圆点能取代所有字符,包括换行符。
测试发现还是会换行,再替换:
$content = str_replace(PHP_EOL, '', $content);
在 windows、linux、mac 里面的换行符都不一样,好在 PHP 有个预定义常量PHP_EOL可以通用。
$space = array(" ", " ", " ", " ", " ");
$go_away = array("", "", "", "", "");
$content = str_replace($space, $go_away, $content);
替换所有可能存在的情况,世界终于清静了。
最后就是mb_substr,截取中文用的。
有个特殊的地方就是截取的字数只能是3的倍数,不然有时候会出现某个字被截了一半的情况。
最佳答案