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 retornoNo 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 :)