Maison > développement back-end > tutoriel php > Comment puis-je tronquer avec précision des chaînes multi-octets tout en conservant les limites des mots ?

Comment puis-je tronquer avec précision des chaînes multi-octets tout en conservant les limites des mots ?

Linda Hamilton
Libérer: 2024-12-07 15:01:15
original
641 Les gens l'ont consulté

How Can I Precisely Truncate Multibyte Strings While Maintaining Word Boundaries?

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;
}
Copier après la connexion

Cette fonction implémente les étapes décrites dans la question :

  1. Calculer le maximum longueur.
  2. Validez si la chaîne est plus longue que la longueur maximale.
  3. Trouvez le dernier caractère espace en dessous de la longueur maximale.
  4. Coupez la chaîne en conséquence.
  5. Ajouter le terminateur.
  6. Renvoyer le texte tronqué string.

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 …"
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal