文章预览 php,php 自定义函数实现博客文章预览,无乱码,自动补齐HTML标签

这两个函数可以解决以下几个问题:

PHP截取中文字符串,易乱码;

表客文章都是用编辑器写出来的,里面有HTML标签,而我们截取博客文章,可能会把HTML标签截断,导致页面布局混乱,形如

效果如图:

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

cut.jpg (13.54 KB)

2008-9-17 10:56

我想的办法是:

先从数据库查询500个字节出来,再用function mysubstr($str) 中文截取函数取前490个字节,这样中文就没有被截断;

再用function closetags($html)函数来关闭html标签;

太痛苦了,为了实现在博客首页显示所有文章的预览(截取一段文章),可费了不少心思啊,类似新浪博客的预览之类,

几经周折,在茫茫网上中,在帮助手册上找到一些内容,经过修改,整理,终于实现了我要的效果,特意共享出来!(可能还有一些不足,有啥bug请联系我QQ451396534),复制PHP内容到剪贴板PHP代码:

function mysubstr($str) {

//正确截取中文字符串

$start = 1;

$len = 395;

$tmpstr = "";

$strlen = $start + $len;

for($i = 0; $i < $strlen; $i++) {

if(ord(substr($str, $i, 1)) > 0xa0) {

$tmpstr .= substr($str, $i, 2);

$i++;

} else

$tmpstr .= substr($str, $i, 1);

}

return $tmpstr;

}

function closetags($html){

/*截取最后一个 < 之前的内容,确保字符串中所有HTML标签都以 > 结束*/

$html=preg_replace("~]+?$~i", "", $html);

/*自动匹配补齐未关闭的HTML标签*/

#put all opened tags into an array

preg_match_all("##iU",$html,$result);

$openedtags=$result[1];

#put all closed tags into an array

preg_match_all("#([a-z]+)>#iU",$html,$result);

$closedtags=$result[1];

$len_opened = count($openedtags);

# all tags are closed

if(count($closedtags) == $len_opened){

return $html;

}

$openedtags = array_reverse($openedtags);

# close tags

for($i=0;$i

if (!in_array($openedtags[$i],$closedtags)){

$html .= ''.$openedtags[$i].'>';

} else {

unset($closedtags[array_search($openedtags[$i],$closedtags)]);

}

}

return $html;

}使用方法也讲一下吧,因为在博客首页显示的内容都是从数据库查询出来的,是一个二维的数组,而我们要应用这两个函数的可能就一个content字段,

例如:复制PHP内容到剪贴板PHP代码:

查询时:SELECT id, title, left( content, 400 ) AS content from blog; $rows = 500;   // 数组的总行数,自已定义; for ($i=0;$i

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值