Lorsque l'on traite des chaînes en programmation, il est souvent nécessaire de les tronquer pour les adapter à une longueur spécifique. Cependant, couper naïvement des caractères peut conduire à des résultats gênants ou incorrects, surtout si la troncature se produit au milieu d'un mot.
En PHP, nous disposons de quelques options pour tronquer des chaînes tout en préservant l'intégrité sémantique.
La fonction wordwrap peut diviser une chaîne en plusieurs lignes, en respectant les limites des mots. En spécifiant une largeur maximale, nous pouvons créer un saut de ligne au mot le plus proche avant la longueur souhaitée. L'extrait de code suivant illustre cette approche :
$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"));
Maintenant, $truncated_string contient le texte souhaité, mais seulement jusqu'à la fin du dernier mot avant le 200ème caractère.
Cette approche fonctionne bien, mais elle ne gère pas le cas où la chaîne d'origine est plus courte que la largeur souhaitée. Pour résoudre ce problème, nous pouvons envelopper la logique dans une instruction conditionnelle :
if (strlen($string) > $desired_width) { $truncated_string = substr($string, 0, strpos(wordwrap($string, $desired_width), "\n")); }
Un problème subtil survient lorsque la chaîne contient un caractère de nouvelle ligne avant le point de troncature souhaité. Dans de tels cas, la fonction wordwrap peut créer un saut de ligne prématurément. Pour surmonter ce problème, nous pouvons utiliser une approche basée sur des expressions régulières plus sophistiquées :
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)); }
Cette fonction parcourt les jetons de mots et s'arrête lorsque la longueur totale dépasse la largeur souhaitée. Il reconstruit ensuite la chaîne tronquée, en s'assurant qu'elle se termine à la limite d'un mot.
Les tests unitaires sont cruciaux pour valider la fonctionnalité de notre code. La classe de test PHP PHPUnit fournie démontre le comportement correct de la fonction tokenTruncate.
Les caractères UTF8 spéciaux comme « à » peuvent nécessiter une manipulation supplémentaire. Ceci peut être réalisé en ajoutant « u » à la fin de l'expression régulière :
$parts = preg_split('/([\s\n\r]+)/u', $string, null, PREG_SPLIT_DELIM_CAPTURE);
En employant ces techniques, nous pouvons tronquer en toute confiance des chaînes en PHP, en conservant leur intégrité sémantique et en garantissant des résultats esthétiques et cohérents. .
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!