Обрезать многобайтовую строку до n символов
Я пытаюсь получить этот метод в 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_*
функционирует сейчас, но все дало неправильные результаты. Это не может быть так сложно, поэтому я явно что-то упускаю. Кто-нибудь поделится рабочей реализацией для этогоили же укажи мне ресурс, где я смогу наконец понять, как это сделать.
Спасибо
Постскриптум Да я проверилhttps://stackoverflow.com/search?q=truncate+string+php до :)