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

Comment tronquer en toute sécurité les chaînes UTF-8 en PHP tout en préservant les limites des mots ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-18 16:23:11383parcourir

How to Safely Truncate UTF-8 Strings in PHP While Preserving Word Boundaries?

Tronquage de chaînes avec des caractères UTF-8

Problème :
Tronquage de chaînes multi-octets à une limite de caractères spécifiée tout en préservant les limites des mots peut être un défi en PHP. Ce problème implique d'obtenir cette fonctionnalité avec une méthode personnalisée nommée truncate() qui doit se comporter de manière cohérente avec les caractères multi-octets.

Étapes à résoudre :

  1. Déterminer le maximum longueur des caractères en déduisant la longueur de la chaîne de terminaison de la longueur maximale souhaitée.
  2. Assurez-vous que la longueur de la chaîne dépasse la longueur maximale ; renvoyez-le inchangé si ce n'est pas le cas.
  3. Identifiez le dernier caractère d'espacement en dessous de la longueur maximale pour établir la limite du mot.
  4. Tronquez la chaîne au dernier espace ou à la longueur maximale s'il n'y a pas d'espace. existe.
  5. Ajouter la chaîne de terminaison à la chaîne tronquée.
  6. Renvoyer le texte modifié string.

Solution utilisant mb_strimwidth() :

PHP fournit la fonction mb_strimwidth(), qui peut gérer la troncature de chaîne multi-octets. Cette fonction n'obéit cependant pas aux limites des mots. L'extrait de code suivant démontre son utilisation :

public function truncate($string, $chars = 50, $terminator = ' …')
{
    $maxChars = $chars - strlen($terminator);
    if (mb_strlen($string) <= $maxChars) {
        return $string;
    }

    $lastWhitespace = mb_strrpos(mb_substr($string, 0, $maxChars), ' ');
    if ($lastWhitespace !== false) {
        return mb_substr($string, 0, $lastWhitespace) . $terminator;
    } else {
        return mb_substr($string, 0, $maxChars) . $terminator;
    }
}

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!

Déclaration:
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