如何将HTML截断为特定数量的字符?

4

我有一些内容(部分来自外部来源,部分是特别编写的),以博客格式显示。我想在一定数量的字符后截断文本,因此目前我正在执行以下操作:

<?=substr( strip_tags($a['content']), 0, 400 )?>

问题在于,这样会丢失所有格式,我只会得到一个大段的文本。但如果我不去掉标签,显然有些标签将无法关闭并破坏布局。

有什么好的方法可以在X个字符后截断,但同时保留一些基本格式吗?


也许 https://dev59.com/EHM_5IYBdhLWcg3w3nRs 对您有所帮助? - Max
4个回答

4

2
哈,这个评论无价:“我喜欢小变量名,对我来说打长名称很无聊”。 - DisgruntledGoat
链接已损坏。 - Iulian Onofrei

0

这可能不是你问题的答案,但这是解决此问题的一种方法。

如果我在写博客,我会想要定义帖子被截断的位置。这样,我就可以发布像视频这样的内容,并在视频结束的地方截断帖子,然后在查看帖子时显示其余部分。

尝试在您想要截断帖子的位置添加特定的字符串,例如“--”或某个标记,以便断点位置不可见。

然后,您可以使用mb_stripos来存储断点字符串的位置,然后将该位置作为子字符串方法的长度传递。

或者...

<?=substr( strip_tags($a['content']), 0, mb_stripo(strip_tags($a['content']),
"break string"))?>

我正在使用我编写的自定义Joomla组件,而您的方法实际上是Joomla在其常规文章中使用的方法。问题是,90%的内容来自外部来源(新闻提要)。 - DisgruntledGoat

0

这可能不如您所需的那么准确,但如果您能确定只使用文本标记,例如标题链接和段落,那么可以尝试类似于:

$i = 0;
while($i < 400){
    $i = strpos($string, '</p>', $i) + 4;
  }
 echo substr( $string, 0, strpos($string, '</p>', $i)+4);

这意味着您将拥有可变的字符串长度,但它们将尽可能接近最近的段落。


0

不确定这是否是解决您问题的最佳方法,但它是一个简单的方法,如果您只关心保留1或2个标签以保留HTML中的一些基本格式,则可以使用。

因此,您可以执行以下操作:查找要保留的标记并将其替换为一些唯一的字符组合,然后在截断字符串后,查找/替换您创建的唯一字符串组合与您最初替换的标记。

$content = str_replace("<br/>", "\n", $a['content']);
$content = substr(strip_tags($content), 0, 400); 
echo str_replace("\n", "<br/>", $content);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接