Время от времени в программизме для веб возникает задача обрезать строчку скажем на 1000 символов — чтобы было нечто типа «строка…» и «Читать далее» (как например сделано в этом блоге на слишком длинных заметках. Проблемы начинаются с резкой UTF-8 строк, потому что стандартная функция substr в этом отношении демотивирует — байта на каждый символ два, а она режет по одному… В результате может от какой-нибудь буквы «ё», остаться неприглядный однобайтовый служебный символ.
Если у вас есть расширение php_mbstring — нет проблем, там есть функция
$arr = explode(' ', $text); $arr = array_slice($arr, 50); $text = implode(' ', $arr[0]).'...'; unset($arr);
В результате у нас имеется выборка из 50 слов, которая выглядит куда лучше, чем разрыв слов в неожиданных местах.
Вопрос только в том, будет ли это быстрее и меньше нагружать сервер. Сомневаюсь что это так, по сравнению со специализированной функцией.
Ну — тут да, вопрос сложный, согласен, там ведь надо оценить общую производительность при использовании mbstring и использовании стандартных функций. Просто именно в том фишка, что на сервере фронта как правило ничего лишнего, и подобная мера вынужденная. У нас вообще весь основной контент — публикуется заранее, в статику, а затем простейший шаблонизатор на фронте подключает все эти статические файлы, в зависимости от урла запроса и нескольких других параметров. Соответственно обрезка строк используется в шаблонизаторе именно таким образом как раз в силу перечисленных причин — так как часть контента всё-таки динамическая, а PHP там максимально упрощённый.