所以我有一个文章列表,我有一个页面,一次显示 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>";
}
并对其他人做同样的事情。一个非常糟糕的方法,但它会起作用