limit_text выводит только обычный текст и не показывает жирный шрифт

#php #html

#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('amp;nbsp;','',$string);

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

Комментарии:

1. limit_text это не встроенная функция PHP, поэтому у нас нет способа узнать, что она делает. Он уникален для вашего приложения или фреймворка, поэтому вам придется посмотреть, как это работает, там.

2. Вы знаете, это то, что я подумал. Но поскольку это работает, оно должно существовать где-то в моем коде, верно? С трудом его нахожу. Я попытаюсь выполнить поиск.

3. Я предполагаю, что он просто берет первые 150 символов строки и отсекает остальные, следовательно, отсекая конечные html-теги.

4. Мне нужен тег <strong> , и он находится в пределах ограниченного текста.

Ответ №1:

Причиной удаления моих тегов был strip_tags метод прямо в функции. Дух. Хе-хе. Спасибо за комментарии.

Комментарии:

1. Этого будет достаточно. Однако будьте осторожны, удаляя его. Если ваша функция для создания отрывка разрешает открытие, <b> но удаляет закрытие </b> (потому что это превышает ограничение на количество символов), все после этого будет выделено жирным шрифтом. Таким образом легко испортить всю вашу страницу.

2. $story->excerpt Используется только в паре мест на сайте. И я также создал новую функцию, которая идентична limit_text , но без strip_tags метода, и я использую это, чтобы попытаться еще больше изолировать его. Еще раз спасибо!

Ответ №2:

Попробуйте вместо этого эту функцию ограничения текста

 public function limitText($text, $len)
{
    $text = preg_match('#<s*?bb[^>]*>(.*?)</bb[^>]*>#s', $text, $matches);
    return "<b>" . substr($text,0, $len) . "</b>";
}
  

Комментарии:

1. Я попробовал это, и он просто заменил всю мою строку на ‘0’.