tôi đang cố gắng để có được phương pháp này trong một hoạt động Chuỗi Lọc:Truncate một String multibyte đến n chars
public function truncate($string, $chars = 50, $terminator = ' …');
tôi mong đợi này
$in = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWYXZ1234567890";
$out = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUV …";
và cũng này
$in = "âãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿĀāĂ㥹ĆćĈĉĊċČčĎďĐđĒēĔĕĖėĘęĚěĜĝ";
$out = "âãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿĀāĂ㥹ĆćĈĉĊċČčĎďĐđ …";
Đó là $chars
trừ các ký tự của chuỗi $terminator
.
Ngoài ra, bộ lọc được cho là cắt ở ranh giới từ đầu tiên bên dưới giới hạn $chars
, ví dụ:
$in = "Answer to the Ultimate Question of Life, the Universe, and Everything.";
$out = "Answer to the Ultimate Question of Life, the …";
Tôi khá chắc chắn điều này sẽ làm việc với các bước sau
- lượng trừ đi các ký tự trong terminator từ ký tự tối đa
- Validate chuỗi đó là dài hơn giới hạn tính toán hoặc trả lại nó không thay đổi gì
- tìm ký tự dấu cách cuối cùng trong chuỗi bên dưới giới hạn được tính để nhận ranh giới từ
- cắt chuỗi ở không gian cuối cùng hoặc giới hạn được tính nếu không tìm thấy không gian cuối cùng
- thêm terminator chuỗi
- trở lại chuỗi
Tuy nhiên, tôi đã cố gắng kết hợp khác nhau của str*
và mb_*
chức năng bây giờ, nhưng tất cả mang lại kết quả sai. Điều này không thể khó khăn như vậy, vì vậy tôi rõ ràng là thiếu một cái gì đó. Ai đó có thể chia sẻ triển khai hoạt động cho số này hoặc chỉ cho tôi một tài nguyên mà cuối cùng tôi có thể hiểu cách thực hiện.
Cảm ơn
P.S. Có, tôi đã kiểm tra https://stackoverflow.com/search?q=truncate+string+php trước :)
Bạn có thể tìm thấy ['s ($ str) -> truncateSafely (50)'] (https://github.com/delight-im/PHP-Str/blob/8fd0c608d5496d43adaa899642c1cce047e076dc/src/Str.php#L246) hữu ích, như được tìm thấy trong [thư viện độc lập này] (https://github.com/delight-im/PHP-Str). – caw