我正在尝试让我的Joomla网站显示模块中显示的文章中的特定数量的文本。我正在使用以下PHP:
<span class="rightintrotext" itemprop="introtext">
<?php
$length = 400;
if ( mb_strlen($item->introtext ) > $length ) :
echo ( mb_substr($item->introtext, 0, $length)) . " ... ";
?>
<?php
else :
echo $item->introtext;
?>
<?php
endif;
?>
</span>
我认为会显示文章文本的前400个字符,但它只显示约253个字符。我基本上没有PHP经验。我最初使用strlen但在线阅读mb_strlen可以解决我的问题,但两者之间似乎没有什么不同;两者都显示错误的字符数(两者都相同)。
修改:如果我包含包含<p>
标记及其样式(由Joomla自动生成),则为以下内容:
<p style="margin: 0px 0px 15px; padding: 0px; text-align: justify; color: #000000; font-family: 'Open Sans', Arial, sans-serif; font-size: 14px;">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean pharetra, leo suscipit feugiat faucibus, risus erat placerat lacus, a volutpat tellus libero a tortor. In sapien nisi, luctus sed nibh volutpat, egestas ullamcorper purus. Mauris egestas id
这是402个字符所以我认为这就是问题所在。
我想我可以做我想要的字符数+ html标签数(不应该改变)。想法?
答案 0 :(得分:1)
$本期特价货品&GT; introtext
内容是否干净?即如果它包含html特殊字符,标签或除varchar值之外的任何其他元素?
如果没有,则强烈建议在应用mb_substr()之前清除内容。您可以将内容清理为::
mb_strimwidth(strip_tags($item->introtext), 0, 400); //returns varchar substring of length 400 from first character.
如果您愿意,可以进一步清理内容,例如删除htmlspecialchars,htmlentities ......
<强>更新强>
用::
替换你的代码<?php
$lenght = 400;
echo (mb_strlen($item->introtext)>$length) ? mb_strimwidth(strip_tags($item->introtext), 0, $length, "...") : $item->introtext;
?>
更新1
在您问题的编辑部分,您声明要保留html标签+显示400个字符,这是一项艰苦的工作。
您创建的子字符串可以将内容影响为::
如果您将html标记和内容分开,您可能不知道标记的显示时间和位置,因为它是动态内容。
如果你将html标签保留在子字符串中,你永远不知道子字符串是否包含结束标记,这可能会给html结构带来更多困难。
所以,你有选择::