Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/245.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 限制文本并确保没有打开的标记_Php_Truncate - Fatal编程技术网

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

Php 限制文本并确保没有打开的标记,php,truncate,Php,Truncate,因此,我有一个文章列表,我有一个页面,其中一次显示4篇文章,然后将文章描述缩短到1000个字符,并允许用户“阅读更多”,我的问题是在每篇文章中都可能有标签,即:或等,如何在截断文本时查看div或调用的文本中是否有任何打开的标记 下面是它现在的样子 $sum = strip_tags($article, '<a><i><b><u><center><br><img><a><span><i

因此,我有一个文章列表,我有一个页面,其中一次显示4篇文章,然后将文章描述缩短到1000个字符,并允许用户“阅读更多”,我的问题是在每篇文章中都可能有标签,即:
等,如何在截断文本时查看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;
$sum=strip_标签($article');
}
echo$sum;
比如说

如果我有

弗林吉利亚。弗林吉利亚。弗林吉利亚。弗林吉利亚。弗林吉利亚。弗林吉利亚。弗林吉利亚。弗林吉利亚。弗林吉利亚。弗林吉利亚。弗林吉利亚。弗林吉利亚。弗林吉利亚。弗林吉利亚。弗林吉利亚。弗林吉利亚。弗林吉利亚。弗林吉

这将是
Quisque imperdiet imperdiet fronnilla.Quisque sit amet nibh odio.Fusce sit amet massa vivate mi faucibus viverra.

但是,如果我将截断数字设置为10,则该标记将保持打开状态,因此所有后缀都将以斜体显示。使用,在前X个字符内搜索打开的标记(其中X是截断数字)。如果为真,则添加到字符串中

基本上,(伪代码)

if(first10chars.contains[在此处使用strpos]“和!.contains”“){
$endstr.=”;
}

这是一个非常糟糕的方法,但它会起作用,所以动态让我接近了,但使用
strpos()
是关键,我在代码中添加了这个
if((strpos($sum,)&(!strpos($sum,)){echo”“;)
我允许的每个标签都有一个类似的标签,下一步要做的是找出如何确保文章结尾附近没有图像或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>'; }
$sum=strip_标签($article,;)
编辑:

好的,我想出了一个比确保文章末尾没有图像更好的解决方案,我只是简单地设置了divs
overflow:hidden;
,它可以根据图像调整大小

编辑:


我也有一个问题,打破了一个

标记的中间,这给我留下了
你到底是什么意思,看看是否有打开的标记?我会更新来解释…我想你剥离了所有的标记。除了我允许的标记

之外,我发布了一些你可以构建的东西。这让我走上了正确的轨道k、 我还回答了我提出的最终解决方案好的,谢谢你这么做,大多数用户没有,这会让人们留下同样的问题:P
$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>'; }