Truncar una cadena multibyte a n caracteres

Estoy tratando de conseguir este método en un filtro de cadena de trabajo:

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

Esperaría esto

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

y también esto

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

Es decir$chars menos los caracteres de la$terminator cuerda.

Además, se supone que el filtro debe cortar en el límite de la primera palabra debajo del$chars límite, por ejemplo

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

Estoy bastante seguro de que esto debería funcionar con estos pasos.

Resta la cantidad de caracteres en terminador de caracteres máximosvalide que la cadena sea más larga que el límite calculado o devuélvala sin alterarencuentre el último carácter de espacio en la cadena debajo del límite calculado para obtener el límite de la palabracortar cadena en el último espacio o límite calculado si no se encuentra el último espacioañadir terminador a la cadenacadena de retorno

Sin embargo, he probado varias combinaciones destr* ymb_* Funciona ahora, pero todos arrojaron resultados erróneos. Esto no puede ser tan difícil, así que obviamente me estoy perdiendo algo. ¿Alguien compartiría una implementación de trabajo para esto?o apúntame a un recurso donde finalmente pueda entender cómo hacerlo.

Gracias

PD Si lo he comprobadohttps://stackoverflow.com/search?q=truncate+string+php antes de :)

Respuestas a la pregunta(3)

Su respuesta a la pregunta