Резка строк в UTF-8 в PHP

Время от времени в программизме для веб возникает задача обрезать строчку скажем на 1000 символов - чтобы было нечто типа "строка..." и "Читать далее" (как например сделано в этом блоге на слишком длинных заметках. Проблемы начинаются с резкой UTF-8 строк, потому что стандартная функция substr в этом отношении демотивирует - байта на каждый символ два, а она режет по одному... В результате может от какой-нибудь буквы "ё", остаться неприглядный однобайтовый служебный символ.

Если у вас есть расширение php_mbstring - нет проблем, там есть функция mb_substr, которая корректно обрабатывает юникод. А вот если нету (скажем, на высоконагруженных проектах интерпретатор PHP как правило максимально облегчён - без всяких лишних расширений) то уже сложнее. Однако, выход есть - не обязательно резать по буквам, можно резать по словам. Этот метод я случайно обнаружил в одном из рабочих проектов и просто поразился простоте и эффективности решения такой уже тривиальной задачи. Собственно, сабж:
$arr = explode(' ',$text);
$arr = array_slice($arr,50);
$text = implode(' ',$arr[0]).'...';
unset($arr);

В результате у нас имеется выборка из 50 слов, которая выглядит куда лучше, чем разрыв слов в неожиданных местах.
Теги:
строка
Добавлено: 24 Мая 2018 18:15:56 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...