Обрезать многобайтовую строку до 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 до :)

Ответы на вопрос(3)

Ваш ответ на вопрос