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

时间:2010-06-04 14:04:18

标签: php html layout truncate

我有一些内容(一些来自外部来源,一些是特别编写的),以一种博客格式显示。我想在一定数量的字符后切断文本,所以目前我正在这样做:

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

问题是,这会丢失所有格式,我只会得到一大块文本。但是如果我不剥离标签,很明显一些标签会不公开并弄乱布局。

在X个字符后截断的好方法是什么,还要保留一些基本格式?

4 个答案:

答案 0 :(得分:4)

http://snippets.dzone.com/posts/show/7125

这将自动关闭任何被剪切的标签。评论中的版本似乎更好。

答案 1 :(得分:0)

这可能无法回答您的问题,但这是解决此问题的一种方法。

如果我正在撰写博客,我想要定义帖子被截断的位置。通过这种方式,我可以发布视频等内容并截断视频结束处的帖子,然后在查看帖子时显示其余内容。

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

然后从那里你可以使用mb_stripos来存储break字符串的位置,然后将该位置作为substring方法的长度传递。

...或

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

答案 2 :(得分:0)

这可能不如您想要的那么准确,但是如果您可以确定只有文本标记,例如标题链接和使用的段落,例如:

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

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

答案 3 :(得分:0)

不相信这是否是解决问题的最佳方法,但它很简单,如果你只关心保留1或2个标签以保留html中的一些基本格式,那就行了。

所以,你可以这样做:找到你想要保留的标签并用一些独特的字符组合替换它们,然后在截断字符串后,找到/替换你用最初替换它们的标签创建的唯一字符串组合用。

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