【问题标题】:How to truncate HTML to certain number of characters?如何将 HTML 截断为一定数量的字符?
【发布时间】:2011-02-27 19:47:36
【问题描述】:

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

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

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

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

【问题讨论】:

标签: php html layout truncate


【解决方案1】:

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

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

【讨论】:

  • 哈,这条评论是无价的:“我喜欢小变量名,对我来说输入长名字很无聊”。
  • 链接已损坏。
【解决方案2】:

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

如果我正在写博客,我想定义帖子将被截断的位置。这样我就可以发布视频之类的内容,并在视频结束处截断帖子,然后在查看帖子时显示其余内容。

尝试在您希望截断帖子的位置添加特定字符串,例如"--" 或一些标签,因此中断位置不可见。

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

或者...

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

【讨论】:

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

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

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

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

【讨论】:

    【解决方案4】:

    不相信这是否是解决您的问题的最佳方法,但它是一种简单的方法,如果您只关心保留 1 或 2 个标签以保留 html 中的一些基本格式,那么它会起作用。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-09
      • 1970-01-01
      • 2012-05-30
      • 1970-01-01
      • 1970-01-01
      • 2018-04-12
      • 2012-05-05
      相关资源
      最近更新 更多