limit_text仅输出纯文本,不显示粗体字体

时间:2019-03-27 18:28:32

标签: php html

我有一些代码可以输出标题和帖子列表的描述。我试图限制两者的文本长度。标题是$ 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('&nbsp;','',$string);

$string = substr($string, strpos($string, "<p><strong>"));
$string = strip_tags($string);
$string = substr($string, 0, $limit);
$string = $string.'...';
return $string;
}

2 个答案:

答案 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>";
}