Я пытаюсь включить этот метод в String Filter:
public function truncate($string, $chars = 50, $terminator = ' …');
Я бы ожидал этого
$in = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWYXZ1234567890";
$out = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUV …";
, а также это
$in = "âãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿĀāĂ㥹ĆćĈĉĊċČčĎďĐđĒēĔĕĖėĘęĚěĜĝ";
$out = "âãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿĀāĂ㥹ĆćĈĉĊċČčĎďĐđ …";
Это $chars
минус символы строки $terminator
.
Кроме того, фильтр должен обрезаться на границе первого слова ниже предела $chars
, например
$in = "Answer to the Ultimate Question of Life, the Universe, and Everything.";
$out = "Answer to the Ultimate Question of Life, the …";
Я вполне уверен, что это должно работать с этими шагами
- вычитать количество символов в терминаторе из максимальных символов
- проверить, что строка длиннее, чем вычисленный лимит, или вернуть его без изменений
- найти последний пробел в строке ниже расчетного предела, чтобы получить границу слова
- вырезать строку в последнем или рассчитанном пределе, если последний пробел не найден
- добавить терминатор к строке
- возвращаемая строка
Однако я пробовал различные комбинации функций str*
и mb_*
, но все они дали неверные результаты. Это не может быть так сложно, поэтому я явно что-то упускаю. Кто-нибудь поделится рабочей реализацией для этого или , укажет мне ресурс, где я наконец смогу понять, как это сделать.
Спасибо
P.S. Да, я проверял https://stackoverflow.com/search?q=truncate+string+php раньше:)