Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/260.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.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 substr函数显示不正确_Php_Joomla - Fatal编程技术网

Php substr函数显示不正确

Php substr函数显示不正确,php,joomla,Php,Joomla,我使用的substr()函数如下: <a href="#">link</a> <?php echo substr($item->introtext,0,75);?> <a href="#">read-more</a> <a href="#">link</a> <p>introtext paragraphs here<a href="#">read-more</a><

我使用的substr()函数如下:

<a href="#">link</a>
<?php echo substr($item->introtext,0,75);?>
<a href="#">read-more</a>
<a href="#">link</a>
<p>introtext paragraphs here<a href="#">read-more</a></p>
<a href="#">link</a>
<p>introtext paragraphs here</p>
<a href="#">read-more</a>

当introtext包含超过75个字符时,它的显示不正确,如下所示:

<a href="#">link</a>
<?php echo substr($item->introtext,0,75);?>
<a href="#">read-more</a>
<a href="#">link</a>
<p>introtext paragraphs here<a href="#">read-more</a></p>
<a href="#">link</a>
<p>introtext paragraphs here</p>
<a href="#">read-more</a>

这里有引文段落

但当介绍文本少于75个字符时,它会正确显示如下:

<a href="#">link</a>
<?php echo substr($item->introtext,0,75);?>
<a href="#">read-more</a>
<a href="#">link</a>
<p>introtext paragraphs here<a href="#">read-more</a></p>
<a href="#">link</a>
<p>introtext paragraphs here</p>
<a href="#">read-more</a>

这里有引文段落

请注意,当introtext超过75个字符时,read more在p中,但当少于75个字符时,read more不在p中

我的全部代码如下:

<ul class="latestnews<?php echo $moduleclass_sfx; ?>">
<h3>news</h3>
<?php foreach ($list as $item) :  ?>

    <li>
        <a href="<?php echo 'index.php?option=com_content&view=article&id='.$item->id; /* echo $item->link;*/ ?>">
            <?php echo $item->title; ?></a>
          <?php echo substr($item->introtext,0,75);?>
          <br /><a class="learn-more" href="<?php echo 'index.php?option=com_content&view=article&id='.$item->id; //* echo $item->link;*/ ?>">learn more</a>
    </li>
<?php endforeach; ?>
</ul>

问题在于,
标记实际上位于介绍文本中

因此,要解决这个问题,您需要从字符串的末尾修剪结束标记

<ul class="latestnews<?php echo $moduleclass_sfx; ?>">
<h3>news</h3>
<?php foreach ($list as $item) :  ?>

    <li>
        <a href="<?php echo 'index.php?option=com_content&view=article&id='.$item->id; /* echo $item->link;*/ ?>">
            <?php echo $item->title; ?></a>
          <?php echo substr(rtrim($item->introtext,"</p>"),0,75);?>
          <br /><a class="learn-more" href="<?php echo 'index.php?option=com_content&view=article&id='.$item->id; //* echo $item->link;*/ ?>">learn more</a>
          </p>
    </li>
<?php endforeach; ?>
</ul>

Joomla有内置函数,可以智能地修剪介绍文本:JHtmlString::truncate(),JHtmlString::truncateComplex(),JHtmlString::abridge()。我会使用truncateComplex,因为您可能希望渲染75个字符,但不将html作为字符计算。

原因 当
$item->introtext
少于75个字符时,结束标记

肯定在75个字符范围内,因此结构将-

<p>paragraph content</p>
<a href="#">read-more</a>
解决方案
是导致问题的原因

因此,您可以做一件事,即去除文本中的所有标记,这样
substr()
就不会计算标记和样式语句的数量,并在此后应用所有必要的样式。因此,将代码更改为-

<?php echo substr(strip_tags($item->introtext),0,75);?>


段落标签是如何添加到那里的?请展示整个php。我使用的是joomla,introtext取自文章,段落标签出现在其中。第二个o/p应该是正确的,但你说它是错误的<代码>
已经在包含substr的php块的文本之外。无论如何,锚文本已经在外部。所以你说的第一个是正确的,我认为是错误的。请复习。@RajeshPaul谢谢。我已经看过了。请你扩展一下我关于JHtmlString::truncateComplex()的问题的答案,因为我找不到相关的文档。请阅读代码,然后阅读显示输入和输出如何工作的测试。基本上,简单的截断要么给你75个字符的纯文本,去掉所有的html,要么给你75个字符,包括html字符,以及整理好的html。TruncateComplex将为您提供75个字符的文本加上包含该文本的任何html(即html标记不计入您的字符数),它将确保关闭所有打开的标记。所以总是有的例子。检查他更新的问题。根据编辑后的问题,您的答案将是错误的。@micb您的代码对我来说也很好。但我面临的问题是,若introtext有introtext

,那个么它就不会显示。我能为此做些什么?
introtext

应该显示introtext。应该没问题。从整个html中提取75个字符的文本是什么意思?所以基本上你只需要文本,而不需要包含的标记,不是吗?请确认并让我编辑我的ans。让我们看看出现了一个空白html

您注意到空白html了吗?