Sto cercando di ottenere questo metodo in un lavoro stringa di filtro:troncare una stringa multibyte di n caratteri
public function truncate($string, $chars = 50, $terminator = ' …');
mi aspetto questo
$in = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWYXZ1234567890";
$out = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUV …";
e anche questo
$in = "âãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿĀāĂ㥹ĆćĈĉĊċČčĎďĐđĒēĔĕĖėĘęĚěĜĝ";
$out = "âãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿĀāĂ㥹ĆćĈĉĊċČčĎďĐđ …";
Questo è $chars
meno i caratteri della stringa $terminator
.
Inoltre, il filtro dovrebbe tagliare al primo limite di parole sotto il limite $chars
, ad es.
$in = "Answer to the Ultimate Question of Life, the Universe, and Everything.";
$out = "Answer to the Ultimate Question of Life, the …";
Io sono abbastanza sicuro che questo dovrebbe funzionare con questi passaggi
- importo sottrarre di caratteri in terminatore caratteri massimo
- validate quella stringa è più lungo del limite calcolato o restituirla inalterato
- trova l'ultimo carattere dello spazio nella stringa sotto il limite calcolato per ottenere il limite della parola
- taglia la stringa all'ultimo spazio o il limite calcolato se non viene trovato l'ultimo spazio
- accoda terminatore di stringa
- stringa di ritorno
Tuttavia, ho provato varie combinazioni di str*
e mb_*
funzioni ora, ma tutti hanno dato risultati sbagliati. Questo non può essere così difficile, quindi ovviamente mi manca qualcosa. Qualcuno potrebbe condividere un'implementazione funzionante per questo o indicando una risorsa in cui posso finalmente capire come farlo.
Grazie
P.S. Sì, ho controllato prima https://stackoverflow.com/search?q=truncate+string+php :)
È possibile trovare ['s ($ str) -> truncateSafely (50)'] (https://github.com/delight-im/PHP-Str/blob/8fd0c608d5496d43adaa899642c1cce047e076dc/src/Str.php#L246) utile, come trovato in [questa libreria standalone] (https://github.com/delight-im/PHP-Str). – caw