我有一些内容(部分来自外部来源,部分是特别编写的),以博客格式显示。我想在一定数量的字符后截断文本,因此目前我正在执行以下操作:
<?=substr( strip_tags($a['content']), 0, 400 )?>
问题在于,这样会丢失所有格式,我只会得到一个大段的文本。但如果我不去掉标签,显然有些标签将无法关闭并破坏布局。
有什么好的方法可以在X个字符后截断,但同时保留一些基本格式吗?
我有一些内容(部分来自外部来源,部分是特别编写的),以博客格式显示。我想在一定数量的字符后截断文本,因此目前我正在执行以下操作:
<?=substr( strip_tags($a['content']), 0, 400 )?>
问题在于,这样会丢失所有格式,我只会得到一个大段的文本。但如果我不去掉标签,显然有些标签将无法关闭并破坏布局。
有什么好的方法可以在X个字符后截断,但同时保留一些基本格式吗?
这可能不是你问题的答案,但这是解决此问题的一种方法。
如果我在写博客,我会想要定义帖子被截断的位置。这样,我就可以发布像视频这样的内容,并在视频结束的地方截断帖子,然后在查看帖子时显示其余部分。
尝试在您想要截断帖子的位置添加特定的字符串,例如“--”或某个标记,以便断点位置不可见。
然后,您可以使用mb_stripos来存储断点字符串的位置,然后将该位置作为子字符串方法的长度传递。
或者...
<?=substr( strip_tags($a['content']), 0, mb_stripo(strip_tags($a['content']),
"break string"))?>
这可能不如您所需的那么准确,但如果您能确定只使用文本标记,例如标题链接和段落,那么可以尝试类似于:
$i = 0;
while($i < 400){
$i = strpos($string, '</p>', $i) + 4;
}
echo substr( $string, 0, strpos($string, '</p>', $i)+4);
这意味着您将拥有可变的字符串长度,但它们将尽可能接近最近的段落。
不确定这是否是解决您问题的最佳方法,但它是一个简单的方法,如果您只关心保留1或2个标签以保留HTML中的一些基本格式,则可以使用。
因此,您可以执行以下操作:查找要保留的标记并将其替换为一些唯一的字符组合,然后在截断字符串后,查找/替换您创建的唯一字符串组合与您最初替换的标记。
$content = str_replace("<br/>", "\n", $a['content']);
$content = substr(strip_tags($content), 0, 400);
echo str_replace("\n", "<br/>", $content);