如何使用带有substr的strip_tags来正确获取内容并避免破坏html标签?

时间:2011-09-22 17:31:58

标签: php javascript jquery xml dom

在我的页面中,我有一些来自RSS Feed的帖子预览。每个帖子预览显示约300个字符。当用户点击展开按钮时,#post-preview将替换为#post。 #post显示帖子的其余部分。

一切都很好,但#post的格式不好,不可读。所以我想到允许<br><b><p>标签,它会让你可以阅读。因为我不希望用户分心,我希望在300个字符之后允许标记。

使用以下方法,可以打破$start结束和$rest开始的一些标记。这意味着没有良好的可读输出。

$start = strip_tags(substr($entry->description, 0, 300));
$rest = strip_tags(substr($entry->description, 300), '<b><p><br>');
$start . $rest;

我的问题是如何在300个字符之前保持$start$rest相同(无标签),之后$rest将显示格式化的帖子?有没有其他方法可以做到这一点?

以下是RSS Feed结构的示例(来自视图页面源)。

<item><guid isPermaLink="false"></guid><pubDate></pubDate><atom:updated></atom:updated><category domain=""></category><title></title><description></description><link></link><author></author></item>

我正在寻找一种不会扼杀性能的方法。

1 个答案:

答案 0 :(得分:0)

类似的东西:

$start = substr($entry->description, 0, 300);
if(($pos = stripos($start, "<")) !== false) {
    $start = strip_tags(substr($start, 0, $pos));
    $rest = substr($entry->description, $pos);
}
else {
    $start = strip_tags($start);
    $rest = substr($entry->description, 300);
}

好吧,这只是一个概念。获取前300个字符并检查损坏的标记。如果在它之前断裂并从这一点获得$ rest。如果不打破只是剥离和休息。至少有一个问题:

  • 你现在从来没有$ start的长度(在strip_tags之后可能没有任何东西),可以使用循环进行长度检查但是eeee ...效率

修改 好的,明白了:

$start = "";
$chars = 400;
while(strlen($start) < 300) { 
    $start = strip_tags(substr($rss, 0, $chars));
    $chars += 50;
}
$pos = stripos($rss, substr($start, strlen($start) - 50));
$rest = substr($rss, $pos+50);

好的,有点讨厌,有些情况下失败了(可重复的文字可能是:D),在Ideone上进行了测试