#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’.