Ограничить текст по количеству слов / символов в php
X
Заказать сайт
Заказать сайт

Ограничить текст по количеству слов / символов в php

Создавая модули для сайтов или обычную выгрузку текста из БД довольно часто требуется ограничить выводимый текст определенным количеством символов или целых слов. Рассмотрим, как реализовать обе задачи.

Ограничить текст количеством выводимых символов

Для этого достаточно использовать такую строку:

$ftexts = mb_substr($ftexts, 0, 250, 'UTF-8');

Где $ftexts - исходный текст, а 0 и 250 означает от скольки до скольки символов показать. И обратите внимание, что здесь выбрана кодировка UTF-8. Все вроде бы неплохо, но если в исходном тексте будут переносы текста типа \n или html теги, то на выходе можем получить не то, что хотели. Доработаем скрипт, добавив перед нашей строкой этот код:

$ftexts = strip_tags($ftexts);
$ftexts = preg_replace(array("\r\n", "\r", "\n"), " ", $ftexts);

Теперь нашему скрипту не страшны любые переносы строк и html теги.

Ограничить текст количеством слов в php

Это простая задача решается не так просто. Я расскажу о нескольких способах ее решения.

Все слова разделяются друг от друга пробелом. Почему бы не использовать explode с разделитилем пробел? А потом собрать через цикл все слова. Поскольку мы будем использовать for цикл, то в нем и будем считать сколько слов прошло через него.

$old_w = "В этом тексте пять слов";
$new_r = '';
$new_w = explode(" ", $old_w);
for ($i=0; $i<2; $i++) { $new_r .= $new_w[$i].' '; }
echo rtrim($new_r);

Как вы уже догадались, здесь выводится всего 2 слова. Минусом является перевод строк, если он встретится в тексте до ограничителя, то напечатается на 1 слово больше.

Более интересным и красивым решением является регулярное выражение.

$text_o = "Выход есть - и это очень хорошо!";
$count_words = 5;
echo preg_match("/((\S+[\s-\!\+\=\.\,\?]+){".$count_words."})/s", $text_o, $text_r) ? rtrim($text_r[1]) . '...' : $text_o;

Код не только устойчив к символам перевода строк, но и знакам препинания. Например, в предыдущем примере если бы в тексте повстречалось тире (а оно обрамляется пробелами), то оно бы посчиталось за целое слово. Здесь же прописаны знаки препинания, которые не надо учитывать, как отдельные слова.

| | Ограничить текст по количеству слов / символов в php | Создавая модули для сайтов или обычную выгрузку текста из БД довольно часто требуется ограничить выводимый текст определенным количеством символов или | https://blogprogram.ru/wp-content/uploads/2018/01/896-131x131.jpg