我有一些代码可以输出标题和帖子列表的描述。我试图限制两者的文本长度。标题是$ story-> title,输出就很好。但是,该描述由代码中的$ story-> excerpt表示,包含数据库中的html标记。 limit_text函数似乎从文本中剥离了这些标签。我认为我需要对字符进行不同的限制,或者需要一个允许这些标签起作用的功能。
我尝试了一些功能,这些功能可使标记可见但不能正常运行。但是我通常对php还是陌生的,所以我不知道很多功能。
<?php
foreach($stories as $story) {
echo '<h2><a href="'.BASE_URL.'/'.$story->slug.'">'.limit_text($story->title, 80).'</a></h2>';
if(!empty($story->excerpt)) {
echo '<p>'.limit_text($story->excerpt, 150).'</p>';
} else {
echo limit_text($story->body, 150);
}
}
?>
我找到了limit_text
的函数
function limit_text($string, $limit = 140) {
$string = preg_replace('/<figcaption>.*?<\/figcaption>/','',$string);
$string = preg_replace('/<div class=\"wp_image_caption\">.*?<\/div>/','',$string);
$string = str_replace(' ','',$string);
$string = substr($string, strpos($string, "<p><strong>"));
$string = strip_tags($string);
$string = substr($string, 0, $limit);
$string = $string.'...';
return $string;
}
答案 0 :(得分:0)
我的标签被剥离的原因是该函数中的strip_tags
方法。咄。呵呵。感谢您的评论。
答案 1 :(得分:-1)
请改用此限制文本功能
public function limitText($text, $len)
{
$text = preg_match('#<\s*?b\b[^>]*>(.*?)</b\b[^>]*>#s', $text, $matches);
return "<b>" . substr($text,0, $len) . "</b>";
}