限制文本并确保没有打开的标签


Limit Text and make sure there are no tags open

所以我有一个文章列表,我有一个页面,一次显示 4 篇文章,然后将文章的描述缩短到 1000 个字符并允许用户"阅读更多",我的问题是在每个帖子中可能有标签 IE:<i><b> <img> <center> 等, 截断文本时如何查看div 或调用的文本中是否有任何打开的标签?

这是它现在的样子

$sum = strip_tags($article, '<a><i><b><u><center><br><img><a><span><iframe>');
    if (strlen($sum) > 1000) {
        $sumCut = substr($sum, 0, 1000);
        $sum = substr($sumCut, 0, strrpos($sumCut, ' ')).'... <div class="right"><a href="article-' .$record[nid]. '">Read More</a></div>'; 
}
 echo $sum;

例如

如果我有...

奎斯克无常饮食无常饮食弗林吉拉。Quisque sit amet nibh odio.Fusce sit amet massa vitae mi faucibus viverra.

<i>Quisque imperdiet imperdiet fringilla. Quisque sit amet nibh odio. Fusce sit amet massa vitae mi faucibus viverra.</i>的代码

但是如果我将我的截断数字设置为 10,它将保持该标签打开状态,因此所有后记都将以斜体显示

如此动态让我接近,但使用 strpos() 是关键,我将其添加到我的代码if ((strpos($sum, '<i>')) && (!strpos($sum, '</i>'))) { echo "</i>"; }中,并且对于我允许的每个标签都有一个类似的标签,接下来要做的是弄清楚如何确保在帖子末尾附近没有图像或 iframe,我将对其进行编辑以解释我是如何做到的, 但现在这是我的代码...

$sum = strip_tags($article, '<a><i><b><u><center><br><img><a><span><iframe>');
if (strlen($sum) > 1000) {
    $sumCut = substr($sum, 0, 1000);
    $sum = substr($sumCut, 0, strrpos($sumCut, ' '));
    $cut = 1; 
}else{
    $cut = 0; }
echo $sum;
if ((strpos($sum, '<i>')) && (!strpos($sum, '</i>'))) { echo "</i>"; }
if ($cut==1) { echo '... <div class="right"><a href="article-' .$record[nid]. '">Read More</a></div>'; }

编辑:

好的,我想出了一个比确保帖子末尾没有图像更好的解决方案,我只是制作了div overflow: hidden;,它可以在其中调整图像大小

编辑:

我还有一个破坏<br>标签中间的问题,它给我留下了<br临时修复似乎是在所有情况下留下错误代码<br<br>之后添加另一个<br>,但至少一切都有效并且不可见,但如果有人有更可行的解决方案,请告诉我

我希望这有帮助

使用 strpos() 搜索前 X 个字符内的开放标记(其中 X 是截断数字。然后,如果为 true,则添加到字符串中。

基本上,(伪代码)

if(first10chars.contains[use strpos here] "<i>" and !.contains "</i>") {
$endstr .= "</i>";
}

并对其他人做同样的事情。一个非常糟糕的方法,但它会起作用