Apabila berurusan dengan rentetan dalam pengaturcaraan, selalunya perlu memotongnya agar sesuai dengan panjang tertentu. Walau bagaimanapun, memotong aksara secara naif boleh membawa kepada hasil yang janggal atau tidak betul, terutamanya jika pemotongan berlaku pada pertengahan perkataan.
Dalam PHP, kami mempunyai beberapa pilihan untuk memotong rentetan sambil mengekalkan integriti semantik.
Fungsi wordwrap boleh memisahkan rentetan kepada berbilang baris, menghormati sempadan perkataan. Dengan menentukan lebar maksimum, kita boleh membuat pemisah baris pada perkataan terdekat sebelum panjang yang dikehendaki. Coretan kod berikut menunjukkan pendekatan ini:
$string = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua."; $desired_width = 200; $truncated_string = substr($string, 0, strpos(wordwrap($string, $desired_width), "\n"));
Kini, $truncated_string mengandungi teks yang diingini, tetapi hanya sehingga akhir perkataan terakhir sebelum aksara ke-200.
Pendekatan ini berfungsi dengan baik, tetapi ia tidak mengendalikan kes di mana rentetan asal lebih pendek daripada yang dikehendaki lebar. Untuk menangani perkara ini, kita boleh membungkus logik dalam pernyataan bersyarat:
if (strlen($string) > $desired_width) { $truncated_string = substr($string, 0, strpos(wordwrap($string, $desired_width), "\n")); }
Isu halus timbul apabila rentetan mengandungi aksara baris baharu sebelum titik pemangkasan yang diingini. Dalam kes sedemikian, fungsi wordwrap boleh mencipta pemisah baris sebelum masanya. Untuk mengatasinya, kita boleh menggunakan pendekatan berasaskan ungkapan biasa yang lebih canggih:
function tokenTruncate($string, $desired_width) { $parts = preg_split('/([\s\n\r]+)/u', $string, null, PREG_SPLIT_DELIM_CAPTURE); $parts_count = count($parts); $length = 0; $last_part = 0; for (; $last_part < $parts_count; ++$last_part) { $length += strlen($parts[$last_part]); if ($length > $desired_width) { break; } } return implode(array_slice($parts, 0, $last_part)); }
Fungsi ini berulang pada token perkataan dan berhenti apabila jumlah panjang melebihi lebar yang diingini. Ia kemudian membina semula rentetan yang dipenggal, memastikan ia berakhir pada sempadan perkataan.
Ujian unit adalah penting untuk mengesahkan kefungsian kod kami. Kelas ujian PHP PHPUnit yang disediakan menunjukkan kelakuan yang betul bagi fungsi tokenTruncate.
Aksara UTF8 khas seperti 'à' mungkin memerlukan pengendalian tambahan. Ini boleh dicapai dengan menambahkan 'u' pada penghujung ungkapan biasa:
$parts = preg_split('/([\s\n\r]+)/u', $string, null, PREG_SPLIT_DELIM_CAPTURE);
Dengan menggunakan teknik ini, kami boleh memotong rentetan dalam PHP dengan yakin, mengekalkan integriti semantiknya dan memastikan hasil yang estetik dan konsisten. .
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Memotong Rentetan dalam PHP Semasa Memelihara Sempadan Perkataan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!