que estoy tratando de conseguir este método en una cadena de filtro de trabajo:puede truncar una cadena multibyte en n caracteres
public function truncate($string, $chars = 50, $terminator = ' …');
yo esperaría que este
$in = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWYXZ1234567890";
$out = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUV …";
y también esta
$in = "âãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿĀāĂ㥹ĆćĈĉĊċČčĎďĐđĒēĔĕĖėĘęĚěĜĝ";
$out = "âãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿĀāĂ㥹ĆćĈĉĊċČčĎďĐđ …";
Eso es $chars
menos los caracteres de la cadena $terminator
.
Además, se supone que el filtro debe cortarse en el límite de la primera palabra debajo del límite $chars
, p. Ej.
$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
- cantidad restar de caracteres en el terminador de caracteres máximos
- validar esa cadena es más larga que el límite calculado o devolverlo inalterada
- encuentra el último carácter de espacio en cadena debajo del límite calculado para obtener el límite de palabra
- corta la cadena en el último espacio o límite calculado si no se encuentra el último espacio
- anexar terminador de cadena
- cadena de retorno
Sin embargo, he probado varias combinaciones de str*
y mb_*
funciones ahora, pero todos dieron resultados erróneos. Esto no puede ser tan difícil, así que obviamente me falta algo. Si alguien comparte una implementación que funcione para este o, dirígeme a un recurso donde finalmente pueda entender cómo hacerlo.
Gracias
P.S. Sí, he comprobado https://stackoverflow.com/search?q=truncate+string+php antes :)
Puede encontrar ['s ($ str) -> truncateSafely (50)'] (https://github.com/delight-im/PHP-Str/blob/8fd0c608d5496d43adaa899642c1cce047e076dc/src/Str.php#L246) útil, como se encuentra en [esta biblioteca independiente] (https://github.com/delight-im/PHP-Str). – caw