Как легко обрезать текст в PHP
Если вы относитесь к WordPress исключительно как к приложению для ведения блога или, даже в более либеральном смысле, к системе управления контентом, то вы, вероятно, привыкли использовать редактор или поле выдержки для написания тизера, а затем добавлять ссылку «Подробнее».
WordPress для веб-приложений (снова)
Для тех, кто читал этот сайт некоторое время, я особенно заинтересован в использовании WordPress в качестве основы для разработки веб-приложений (см. также это, это, это и это ).
На момент написания этой статьи этой статье было около шести лет.
Поэтому бывают случаи, когда контент, который вы собираетесь отображать во внешнем интерфейсе, может поступать из стороннего источника.
Назад к содержанию
То есть приложение работает так:
- обращаться к стороннему API,
- импортировать данные из звонка и парсить их при необходимости,
- записать его в базу данных,
- отображать информацию на интерфейсе по запросу.
Между каждым из вышеперечисленных шагов может быть много всего, но главное, чем я хочу поделиться в этом посте, — это эффективный способ легко обрезать текст с помощью PHP для рендеринга во внешнем интерфейсе.
Это полезно для предоставления тизеров, ссылок на сторонние сайты и многого другого без необходимости писать или редактировать контент вручную.
Чтобы привести пример использования функции, которой я собираюсь поделиться, полезно иметь некоторые требования. Они произвольны для этого поста, но реализация должна быть достаточно конкретной, чтобы вы могли без проблем вставить это в пост.
Предположим:
- мы извлекаем текст из стороннего API,
- данные хранятся где-то в базе данных,
- данные представляют собой обычный текст (без разметки или любых других веб-объектов в структуре),
- нам нужна функция, которая принимает текст и длину для усечения текста.
Учитывая эти требования, мы можем настроить функцию для приема текста и длины аргументов. Если текст меньше или равен указанной длине, делать нечего; в противном случае мы можем обрезать текст до указанной длины и добавить многоточие в конце.
<?php
/**
* Truncates the specified text to the specified length to the last whole word and
* adds ellipses to the end of the truncated string.
*
* @param string $text The text to truncate.
* @param int $length The maximum allowed length of the text.
* @return string The text if it's less than the length of the specified length or the text truncated to the specified length.
*/
public function truncate($text, $length)
{
if ($length >= strlen($text)) {
return $text;
}
return preg_replace(
"/^(.{1,$length})(s.*|$)/s",
'1...',
$text
);
}
Реализации для этого в контексте WordPress могут исходить из чтения данных, хранящихся в пользовательских таблицах, в метаданных сообщений, в таблице сообщений или в основном в любом месте, где хранится необработанный текст, и вы хотите отобразить его во внешнем интерфейсе. .
Если в тексте есть другой контент, такой как HTML или другие объекты, возможно, потребуется сделать допуски. Если это в WordPress, есть фильтры и другие формы обработки этих данных перед усечением текста, но это выходит за рамки простого усечения текста в PHP, верно?
Так что, по крайней мере, используйте это исключительно для текста и, самое большее, делайте поправку на другие типы контента в тексте, прежде чем передавать его в preg_replace, и все будет хорошо.