Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何将HTML截断为一定数量的字符?_Php_Html_Layout_Truncate - Fatal编程技术网

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);