精確截斷多位元組字串
簡介
將字串截斷為特定字串字元長度是程式設計中的常見任務。但是,在處理可能包含不同寬度的字元的多位元組字串時,它會變得更加複雜。這個問題深入研究了截斷多位元組字串同時保留字邊界的細微差別。
PHP 的 mb_strimwidth 函數
如答案所建議的,PHP 提供了一個名為 mb_strimwidth 的便捷函數( ) 處理多位元組字串的截斷。它採用字串、所需的寬度和可選的終止符作為參數。但是,此函數不考慮單字邊界。
自訂截斷演算法
要實現單字邊界截斷,可以使用自訂演算法:
function truncate($string, $chars = 50, $terminator = ' …') { // Calculate the maximum length considering the terminator $max_length = $chars - mb_strlen($terminator); // Short circuit for strings shorter than the maximum length if (mb_strlen($string) <= $max_length) { return $string; } // Find the last space character within the maximum length $last_space_index = mb_strrpos($string, ' ', $max_length); // Cut the string at the last space or at the maximum length if no last space is found $truncated_string = (false !== $last_space_index) ? mb_substr($string, 0, $last_space_index) : mb_strimwidth($string, 0, $chars); // Append the terminator $truncated_string .= $terminator; return $truncated_string; }
該函數實現了中描述的步驟問題:
演示
下面的代碼演示了自定義截斷的用法函數:
$in = "Answer to the Ultimate Question of Life, the Universe, and Everything."; $out = truncate($in, 50, ' …'); echo $out; // "Answer to the Ultimate Question of Life, the …"
結論
PHP 的mb_strimwidth()函數提供了一種截斷多位元組字串的簡單方法,但它不考慮字邊界。透過實現自訂演算法,我們可以實現更精確的截斷,從而保留單字邊界的完整性。
以上是如何在保持字邊界的同時精確截斷多位元組字串?的詳細內容。更多資訊請關注PHP中文網其他相關文章!