Truncar uma seqüência de caracteres multibyte para n caracteres

Estou tentando obter esse método em um filtro de seqüência de trabalho:

public function truncate($string, $chars = 50, $terminator = ' …');

Eu esperaria isso

$in  = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWYXZ1234567890";
$out = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUV …";

e também isso

$in  = "âãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿĀāĂ㥹ĆćĈĉĊċČčĎďĐđĒēĔĕĖėĘęĚěĜĝ";
$out = "âãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿĀāĂ㥹ĆćĈĉĊċČčĎďĐđ …";

Isso é$chars menos os caracteres do$terminator corda.

Além disso, o filtro deve cortar no limite da primeira palavra abaixo do$chars limite, por exemplo

$in  = "Answer to the Ultimate Question of Life, the Universe, and Everything.";
$out = "Answer to the Ultimate Question of Life, the …";

Estou certo de que isso deve funcionar com estas etapas

subtrair quantidade de caracteres no terminador de caracteres máximosvalidar que a string seja maior que o limite calculado ou retorná-lo inalteradoencontre o último caractere de espaço na string abaixo do limite calculado para obter o limite da palavracortar corda no último espaço ou limite calculado se nenhum último espaço for encontradoanexar terminador à stringstring de retorno

No entanto, tentei várias combinações destr* emb_* funciona agora, mas todos produziram resultados errados. Isso não pode ser tão difícil, então obviamente estou perdendo alguma coisa. Alguém compartilharia uma implementação funcional para issoou aponte-me para um recurso onde eu possa finalmente entender como fazê-lo.

obrigado

P.S. Sim, eu verifiqueihttps://stackoverflow.com/search?q=truncate+string+php antes :)

questionAnswers(3)

yourAnswerToTheQuestion