Maison > développement back-end > tutoriel php > Comment puis-je tronquer en toute sécurité des chaînes multi-octets en PHP tout en préservant les limites des mots ?

Comment puis-je tronquer en toute sécurité des chaînes multi-octets en PHP tout en préservant les limites des mots ?

Patricia Arquette
Libérer: 2024-12-04 05:41:09
original
606 Les gens l'ont consulté

How Can I Safely Truncate Multibyte Strings in PHP While Preserving Word Boundaries?

Tronquer des chaînes multi-octets en PHP

En PHP, tronquer des chaînes multi-octets peut être une tâche complexe. Cet article aborde le défi de tronquer de telles chaînes à un nombre spécifié de caractères, en tenant compte à la fois du codage des caractères multi-octets et des limites des mots.

Pour y parvenir, une approche consiste à utiliser la fonction mb_strimwidth() intégrée de PHP, qui permet pour la troncature de chaînes avec des largeurs spécifiées. Cependant, cette fonction ne prend pas en compte les limites des mots.

Implémentation personnalisée pour la troncature

Une implémentation personnalisée peut être créée pour gérer à la fois le codage des caractères multi-octets et les limites des mots :

  1. Calculer la longueur de troncature : Soustraire la longueur de la chaîne de terminaison du nombre maximum de caractères à tronquer.
  2. Valider la longueur de la chaîne : Vérifiez si la chaîne d'entrée est plus longue que la longueur de troncature calculée ; sinon, renvoyez-le tel quel.
  3. Trouver la limite du mot : Utilisez mb_strrpos() pour rechercher le dernier caractère espace dans la chaîne en dessous de la longueur de troncature.
  4. Couper la chaîne : Si une limite de mot est trouvée, tronquez la chaîne à ce stade ; sinon, tronquez à la longueur de troncature calculée.
  5. Ajouter un terminateur : Ajoutez la chaîne de terminaison à la chaîne tronquée.
  6. Retourne la chaîne tronquée : Sortie le tronqué et ajouté string.

Exemple d'utilisation :

function truncate($string, $chars = 50, $terminator = ' …') {
  // Calculate truncation length
  $trunc_len = $chars - strlen($terminator);

  // Validate string length
  if (strlen($string) <= $trunc_len) {
    return $string;
  }

  // Find word boundary
  $space_pos = mb_strrpos($string, ' ', -$trunc_len);

  // Cut string
  if ($space_pos !== false) {
    $truncated_string = mb_substr($string, 0, $space_pos);
  } else {
    $truncated_string = mb_strimwidth($string, 0, $trunc_len);
  }

  // Append terminator
  return $truncated_string . $terminator;
}
Copier après la connexion

Cette fonction peut être utilisée pour tronquer des chaînes multi-octets, en tenant compte à la fois du codage des caractères et des limites des mots. Il fournit une solution simple et robuste pour cette tâche PHP courante.

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