如何获得正确的内容,避免打破html标签使用strip_tags与substr
How to get correctly content and avoid breaking html tags using strip_tags with substr?
在我的页面上,我有一些来自RSS提要的帖子预览。每个帖子预览显示大约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;
我的问题是我如何保持$start
和$rest
相同(没有标签),直到300字符,之后$rest
将显示格式化的帖子?还有别的方法吗?
这是一个RSS提要结构的示例(来自视图页源)。
<item><guid isPermaLink="false"></guid><pubDate></pubDate><atom:updated></atom:updated><category domain=""></category><title></title><description></description><link></link><author></author></item>
我正在寻找一种不影响性能的方法。
类似于
$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个字符并检查是否有损坏的标记。如果破掉了,在它之前切掉,并从这一点得到$休息。如果没有破裂,就脱衣休息。至少有一个问题:
- 你永远不会知道$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上测试
相关文章:
- 如何在tinymce编辑器中将点击事件绑定到html标签
- 从模板标签获取html
- 如何将具有相同功能的两个select html标签的两个JS组合在一起
- Html不是'我没认出Angularjs吐出来的标签
- 带有html标签的Summernote内容
- 为什么我的HTML标签消失了
- 不使用自定义CSS或HTML(使用框架方法)的角度材质文本输入或文本区域标签大小
- 如何忽略单词like“”中的未使用空格;测试-文本”;同时构建html标签
- 在AngularJS中过滤-html标签中的文本
- 如何在另一个 html 标签内选择 web 元素硒 Web 驱动程序与 html 源
- 选择标签 HTML 上的值将数组转换为字符串 Javascript
- 如何以编程方式切换标签HTML/js
- 如何使用NodeJs删除非标签Html元素
- 知道什么时候“音频”标签HTML已经发挥了作用
- 通过标签html中的照片列表更改
- 标签内的另一个标签html
- Sup标签内的标题标签html
- 当我选择另一个选择标签HTML<选择>
- 从节点检索标签HTML
- 如何从网页中删除所有标签(HTML JS PHP CSS JQUERY)