PHP

Обрезка текста для анонса

Анонс, превью, аннотация – это часть статьи в которой содержится краткое содержание и смысл статьи, выводится в категориях и списках. По-хорошему анонс должен писаться отдельно и хранится в отдельном поле. В случаях где анонсы не заполнены, сформировать и вывести их можно несколькими способами:

1

PHP функция для превью

Функция удалят HTML разметку и урезает текст до определенного количества символов указанного в $limit, но оставляет последнее слово целым. Если в конце текста попадаются  . ! ? – они остаются как есть, в других случаях добавляется многоточие.

function preview_text($value, $limit = 300)
{
    $value = stripslashes($value);        
    $value = htmlspecialchars_decode($value, ENT_QUOTES);
    $value = str_ireplace(array('<br>', '<br />', '<br/>'), ' ', $value);
    $value = strip_tags($value);
    $value = trim($value);

    if (mb_strlen($value) < $limit) {
        return $value;
    } else {
        $value   = mb_substr($value, 0, $limit);
        $length  = mb_strripos($value, ' ');
        $end     = mb_substr($value, $length - 1, 1);

        if (empty($length)) {
            return $value;
        } elseif (in_array($end, array('.', '!', '?'))) {
            return mb_substr($value, 0, $length);
        } elseif (in_array($end, array(',', ':', ';', '«', '»', '…', '(', ')', '—', '–', '-'))) {
            return trim(mb_substr($value, 0, $length - 1)) . '...';
        } else {
            return trim(mb_substr($value, 0, $length)) . '...';
        }
        
        return trim();
    }
}

$text = '
    Текст превью (или прехедер) — это небольшой кусочек текста!
    Который «подтягивается» из тела сообщения, и обычно он отображается 
    под полями с именем отправителя и темой сообщения.
';


echo preview_text($text, 60);
echo preview_text($text, 80);

Результат:

Текст превью (или прехедер) — это небольшой кусочек текста!
Текст превью (или прехедер) — это небольшой кусочек текста! Который...
2

Использование разделителя

Еще один способ – расставить в текстах разделитель, например <!--more--> (используется в WorPrees, TinyMCE)  и брать текст до него. При этом вся HTML верстка остается нетронутой, но главное чтобы этот разделитель был во всех статьях.

$text = '
    Текст превью (или прехедер) — это небольшой кусочек текста! 
    <!--more-->
    Который «подтягивается» из тела сообщения, и обычно он отображается 
    под полями с именем отправителя и темой сообщения.
';

echo mb_substr($text, 0, mb_strpos($text, '<!--more-->'));

Результат:

Текст превью (или прехедер) — это небольшой кусочек текста!
В последнее время письма отправляемые с хостингов через функции mail() и mb_send_mail() часто попадают или совсем не...
cURL PHP – это библиотека предназначенная для получения и передачи данных через такие протоколы, как HTTP, FTP, HTTPS....
В статье приведены основные примеры работы с расширением PHP PDO. Такие как подключение к БД, получение, изменение и...
Библиотека GD дает возможность работать с изображениями в PHP. Далее представлены примеры как изменить размер, вырезать...