将HTML内容截断为指定的字符/单词计数,同时保留标记

时间:2013-07-02 20:28:50

标签: php html

我最近需要截断包含HTML的帖子内容(用于帖子摘录/摘要等)。这通常是通过手动输入帖子的摘录来完成的,但对于这个特定的项目,我需要自动完成。

我尝试创建一个简单的方法,只需要对字符进行计数并对内容进行子字符串处理。但是,这不会一直有效,因为它可能会截断HTML标记/属性中的内容。

例如:

<?php
function truncateText($string, $chars) { return substr($string, 0, $chars); }

$content = "<div><p>some content</p><a href='http://google.com'>Let's go to google</a></div>";    

echo truncateText($content,40); //returns "<div><p>some content</p><a href='http:/"

正如您所看到的,它将返回一个破坏的HTML,无法正确呈现。我如何能够截断内容,但保留HTML标签?

2 个答案:

答案 0 :(得分:0)

你的方法会产生很多问题。是否要截断40个字符,然后根据需要添加任意数量的标签,直到它们关闭为止?或者你更喜欢在40处截断并根据需要修剪以使标签工作?这些标签最多可以添加40个字符,还是在计算时会被忽略?你可以看到,这有很多问题。但是,有一个常见的替代摘要:

删除标记并截断文字。摘要通常只是文本的一小部分,一个段落,格式简单。你不需要这里的列表,在大多数情况下,剥离一两个链接是可以的。

但是,如果你真的想走这条路,我建议用一些DOM parser来有意义地阅读html标签,但要知道如何做到这一点,你首先需要回答我写的第一个问题

答案 1 :(得分:0)

如果您不关心是否从文本中删除了格式,那么只需在执行任何其他操作之前通过PHP函数strip-tags()发送字符串。 Instructions here