Tronquer des chaînes multi-octets avec précision
Introduction
Tronquer des chaînes à une longueur de caractères spécifique est une tâche courante en programmation. Cependant, lorsqu'il s'agit de chaînes multi-octets, qui peuvent contenir des caractères de largeurs variables, cela devient plus complexe. Cette question explore les nuances de la troncature des chaînes multi-octets tout en préservant les limites des mots.
Fonction mb_strimwidth de PHP
Comme le suggère la réponse, PHP fournit une fonction pratique appelée mb_strimwidth( ) qui gère la troncature des chaînes multi-octets. Il prend la chaîne, la largeur souhaitée et un terminateur facultatif comme arguments. Cependant, cette fonction ne prend pas en compte les limites des mots.
Algorithme de troncature personnalisé
Pour réaliser la troncature des limites des mots, un algorithme personnalisé peut être utilisé :
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; }
Cette fonction implémente les étapes décrites dans la question :
Démonstration
Le code suivant démontre l'utilisation de la fonction de troncature personnalisée :
$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 …"
Conclusion
La fonction mb_strimwidth() de PHP fournit un moyen simple de tronque les chaînes multi-octets, mais ne prend pas en compte les limites des mots. En mettant en œuvre un algorithme personnalisé, nous pouvons obtenir une troncature plus précise qui préserve l'intégrité des limites des mots.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!