Maxy.fr

Limiter proprement la taille d’un texte en PHP

Il arrive parfois que l’on ai besoin de limiter la taille d’un texte à l’affichage, pour le résumé d’un article ou pour qu’un titre tienne sur une seule ligne par exemple.

J’ai pour cela réalisé une fonction PHP très simple d’utilisation, permettant de découper un texte proprement pour ne pas qu’il ne dépasse un nombre défini de caractères. Proprement c’est à dire quele texte sera découpé entre deux mots et non au milieu de l’un d’entre eux. Le code ajoute aussi « … » à la fin du texte lorsqu’il est découpé, si le nombre de caractères du texte est inférieur à la limite imposée, la fonction retourne le texte en entier.

Voici la fonction :

function limiteCaracteres($limite, $texte)
{
     //Retourne le texte tel quel si sa taille est inférieur à la limite :
     if(strlen($texte) <= $limite){ return $texte; }
 
     //Créé un tableau contenant chaque caractères du texte :
     $listeCaracteres = str_split($texte, 1);
 
     //Créé un tableau contenant la position (clé du tableau $listeCaracteres) de chaque espaces du texte :
     $rechercheEspaces = array_keys($listeCaracteres, ' ');
 
     //Si aucun espace n'est présent dans le texte, on le renvoi coupé à 30-3 caractères :
     if(count($rechercheEspaces) === 0){ return substr($texte, 0, ($limite-3)).'...'; }
 
     //Inverse l'ordre des valeurs du tableau :
     arsort($rechercheEspaces);
 
     //Parcours la liste des espaces (en partant du dernier) et trouve le premier en dessous de la limite :
     foreach ($rechercheEspaces as $positionEspace)
     {
          if($positionEspace <= $limite)
          {
               //Retourne le texte coupé entre deux mots en fonction de la limite :
               return substr($texte, 0, $positionEspace).'...';
          }
     }
 
     //Retourne le texte tel quel en cas d'erreur :
     return $texte;
 }

La fonction prend deux paramètres, le premier étant la limite du nombre de caractères souhaitée, le second étant le texte à découper.

Categories : PHP

By Guillaume - 11/21/2013 at 11:07 pm

Shar this article :

Similar articles