如何使用带有substr的strip_tags来正确获取内容并避免破坏html标签?
在我的页面中,我有一些来自RSS提要的post预览。 每个post预览显示约300个字符。 当用户单击展开按钮时, #post-preview
将替换为#post
。 #post显示post的其余部分。
一切都很好,但#post
的格式不好,不可读。 所以我想到允许使用
标签,它可以让你读取。 因为我不希望用户分心,我希望在300个字符之后允许标记。
使用以下方法,可以打破$start
结束和$rest
开始的一些标记。 这意味着没有良好的可读输出。
$start = strip_tags(substr($entry->description, 0, 300)); $rest = strip_tags(substr($entry->description, 300), '
'); $start . $rest;
我的问题是如何保持$start
和$rest
(没有标签)直到300 char,之后$rest
将显示格式化的post? 有没有其他方法可以做到这一点?
以下是RSS提要结构的示例(来自视图页面源)。
我正在寻找一种不会破坏性能的方法。
就像是:
$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。 如果不打破只是剥离和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上测试过