Php 如何将HTML截断为一定数量的字符?
我有一些内容(一些来自外部来源,一些是专门写的)以一种博客格式显示。我想在一定数量的字符后删除文本,因此目前我正在执行以下操作:Php 如何将HTML截断为一定数量的字符?,php,html,layout,truncate,Php,Html,Layout,Truncate,我有一些内容(一些来自外部来源,一些是专门写的)以一种博客格式显示。我想在一定数量的字符后删除文本,因此目前我正在执行以下操作: <?=substr( strip_tags($a['content']), 0, 400 )?> 问题是,这会丢失所有的格式,我只会得到一大块文本。但是如果我不剥去标签,很明显,一些标签会被打开,并弄乱布局 如果要在X个字符之后进行截断,同时保留一些基本格式,有什么好方法? 这将自动关闭任何被剪断的标签。评论中的版本似乎更好。这可能无法回答您的问题,
<?=substr( strip_tags($a['content']), 0, 400 )?>
问题是,这会丢失所有的格式,我只会得到一大块文本。但是如果我不剥去标签,很明显,一些标签会被打开,并弄乱布局
如果要在X个字符之后进行截断,同时保留一些基本格式,有什么好方法?
这将自动关闭任何被剪断的标签。评论中的版本似乎更好。这可能无法回答您的问题,但这是解决此问题的一种方法 如果我在写博客,我想定义文章被截断的位置。通过这种方式,我可以像视频一样发布内容,并在视频结束处截断帖子,然后在查看帖子时显示其余内容 尝试在希望截断帖子的位置添加特定字符串,例如“--”或某些标记,以使中断位置不可见 然后,您可以使用mb_stripos存储中断字符串的位置,然后将该位置作为substring方法的长度传递 或者
这可能没有您想要的那么准确,但是如果您可以确保只使用文本标记,例如标题、链接和段落,例如:
$i = 0;
while($i < 400){
$i = strpos($string, '</p>', $i) + 4;
}
echo substr( $string, 0, strpos($string, '</p>', $i)+4);
$i=0;
而($i<400){
$i=strpos($string,“”,$i)+4;
}
echo substr($string,0,strpos($string,,$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);
$content=str_replace(“
”、“\n”、$a['content']);
$content=substr(带标签($content),0400);
echo str_replace(“\n”、“
”、$content);
Ha,这条评论是无价的:“我喜欢小变量名,对我来说键入长名称很无聊”。链接已断开。我正在使用我编写的自定义Joomla组件,您的方法实际上就是Joomla在其常规文章中使用的方法。问题是,90%的内容来自外部来源(新闻源)。也许有什么帮助?
$content = str_replace("<br/>", "\n", $a['content']);
$content = substr(strip_tags($content), 0, 400);
echo str_replace("\n", "<br/>", $content);