我正在尝试使我的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标签计数(不应该更改)。想法?
$ item-> intotext
内容清洁吗?即,如果它包含HTML特殊字符,标签或任何其他元素,则除了VARCHAR值之外?
如果不是,则强烈建议在应用MB_SUBSTR()之前清洁内容。您可以将内容清洗为::
mb_strimwidth(strip_tags($item->introtext), 0, 400); //returns varchar substring of length 400 from first character.
如果您愿意,您可以进一步清洁内容,例如删除htmlspecialchars,htmlentities ...
update
用::
替换代码<?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结构上造成更大的麻烦。
所以,您有选项::
- 忽略HTML标签并显示纯文本(但您仍然可以用p,span,div ... and stylelize等HTML标签封闭它的字符长度400
- 使用分离HTML标签并显示内容的复杂机制。(这涉及preg_match并替换,要积极:您不想这样做)