[求]字符串截取函数,要求见贴
我从数据库中读出一段文章存到$str,由于太长所以截取一段做预览。但这文章中有HTML。即里面有<table>、<font>、<marquee>等标签,若直接用substr截取肯定会破坏版面。所以请高手写一个函数来截取。不一定很完美,只要能尽量不破坏版面就行。 问题点数:100、回复次数:8Top
1 楼mistjin(今天天气不错)回复于 2004-07-04 20:06:23 得分 0
看看正则表达式,自己摸索写一下先Top
2 楼surfchen(冲浪)回复于 2004-07-04 20:31:09 得分 0
htmlspecialchars ( string string [, int quote_style [, string charset]])
please try this functionTop
3 楼juxugongzi(拘虚公子)回复于 2004-07-04 21:07:55 得分 0
我想可以使用这个思路:
不要去处理HTML标签,一一去读字符串中的字符,即读到一个 < 就入栈(计数加一),读到一个 > 就出栈(计数减一),这样,如果栈为空(计数为0),则表示当前的字符不是HTML标签的组成部分。这样,只收集非HTML标签字符即可。Top
4 楼Minisheep(风云人物)回复于 2004-07-04 21:11:18 得分 0
我也有过这种想法,先截取一段,比如400个字符
然后计算里面<table>、</table>标签的个数,最后再补上不够的
但这样速度不是很好,可能我的算法不行,谁能写一个吗?Top
5 楼juxugongzi(拘虚公子)回复于 2004-07-04 21:13:43 得分 50
我草草写了一个,你看看:
<?php
function htmlsubstr($str, $start, $length) {
$stack = 0;
$newstr = '';
for ($i = 0; $i < strlen($str); $i++) {
$chr = $str{$i};
if ($chr == '<') $stack++;
if ($chr == '>') $stack--;
if ($stack == 0) $newstr .= $chr;
}
return substr($newstr, $start, $length);
}
?>Top
6 楼juxugongzi(拘虚公子)回复于 2004-07-04 21:15:44 得分 0
嗬嗬,我也没有考虑速度,就像楼主说的,不一定要完美嘛!Top
7 楼mynamesucks(迅雷不及掩耳盗铃之势如破竹)回复于 2004-07-04 21:19:00 得分 0
学习。。Top
8 楼ccterran(iwind)回复于 2004-07-04 21:39:40 得分 50
用strip_tags
echo substr(strip_tags($substr),0,100);Top




