所以我有一个文章列表,我有一个页面,一次显示4篇文章,然后将文章的描述缩短为1000个字符,并允许用户阅读更多&#34;,我的问题是在每个帖子中可能有标签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 imperdiet imperdiet fladilla。 Quisque坐在一个nibh odio。 Fusce坐在aa massa massa mi faucibus viverra。
代码为<i>Quisque imperdiet imperdiet fringilla. Quisque sit amet nibh odio. Fusce sit amet massa vitae mi faucibus viverra.</i>
但是如果我要将截断数设置为10,那么它会使该标记保持打开状态,因此所有后缀都将以斜体显示
答案 0 :(得分:2)
如此动态让我接近,但使用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>
case留下了错误的代码<br<br>
,但至少一切正常并且不可见,但如果有人有更可行的解决方案请告诉我
我希望这会有所帮助
答案 1 :(得分:1)
使用strpos()
,搜索前X个字符中的开放标记(其中X是截断数字。)如果为true,则添加到字符串中。
基本上,(伪代码)
if(first10chars.contains[use strpos here] "<i>" and !.contains "</i>") {
$endstr .= "</i>";
}
并为其他人做同样的事情。一个非常糟糕的方式,但它会工作