staram się dostać tę metodę w pracy filtru String:Obciąć wielobajtowego String do n znaków
public function truncate($string, $chars = 50, $terminator = ' …');
bym tego spodziewać
$in = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWYXZ1234567890";
$out = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUV …";
a także to
$in = "âãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿĀāĂ㥹ĆćĈĉĊċČčĎďĐđĒēĔĕĖėĘęĚěĜĝ";
$out = "âãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿĀāĂ㥹ĆćĈĉĊċČčĎďĐđ …";
To jest $chars
minus znaki z ciągu $terminator
.
Ponadto filtr powinien wycinać pierwszą granicę słowa poniżej limitu $chars
, np.
$in = "Answer to the Ultimate Question of Life, the Universe, and Everything.";
$out = "Answer to the Ultimate Question of Life, the …";
Jestem całkiem pewien, że to powinno działać z tych etapów
- kwotę odjąć od znaków w terminatora z maksymalnymi znaków
- potwierdzić, że łańcuch jest dłuższy niż obliczonego ograniczenia lub zwrócić niezmienioną
- znajdź ostatni znak spacji w łańcuchu poniżej obliczonego limitu, aby uzyskać granicę słowa
- wyciąć ciąg na ostatniej spacji lub obliczony limit, jeśli nie ma ostatniego spacji
- dołączyć terminator ciąg
- powrót strun
Jednak próbowałem różne kombinacje str*
i mb_*
funkcji teraz, ale wszystko dało błędne wyniki. To nie może być takie trudne, więc oczywiście brakuje mi czegoś. Czy ktoś udostępnił działającą implementację tego lub wskazał mi źródło, w którym mogę w końcu zrozumieć, jak to zrobić.
Dzięki
P.S. Tak, sprawdziłem przed https://stackoverflow.com/search?q=truncate+string+php :)
Możesz znaleźć ['s ($ str) -> truncateSafely (50)'] (https://github.com/delight-im/PHP-Str/blob/8fd0c608d5496d43adaa899642c1cce047e076dc/src/Str.php#L246) pomocne, jak znaleźć w [tej samodzielnej bibliotece] (https://github.com/delight-im/PHP-Str). – caw