Petit fonction toute facile pour couper une chaine de caractère sans couper les mots et sans briser des balises. Le fonctionnement est ultra simpliste et modifiable à votre convenance.

Voici la petite fonction:

//_______________________________ couper une chaine sans couper les mots
//
  function coupeChaine($text, $max) {
    if (strlen($text) >= $max) {
      $text = ereg_replace("<[^>]*>", "", $text);
      $text = substr($text, 0, $max);
      $positionEspace = strrpos($text, " ");
      $text = substr($text, 0, $positionEspace)."...";
    }
    return $text;
  }
 
$chaine='Ma chaine à couper... Oulà elle est très longue... En plus je met des balises <strong>ici</strong> et <em>là</em>';
 
$chaineCoupee =  coupeChaine($chaine,15);
echo $chaineCoupee;
//

Comment ca marche:

  1. strlen : compte le nombre de caractère dans la chaine originale, puis rentre dans le ‘if’ si ce nombre est supérieure au nombre $max.
  2. ereg_replace : On enlève toutes les balises html (pour éviter de tronquer la chaine en plein milieu d’une de ces balises).
  3. substr : coupe la chaîne au caractère placé en $max position.
  4. strrpos : trouve la position du dernier espace dans la chaîne restante. La position est ensuite mis dans la variable $positionEspace.
  5. substr + position à couper : coupe la chaîne à la position $positionEspace. On y rajoute ensuite les “…”
  6. appel de la fonction : le premier paramètre de la fonction est donc le texte à tronquer, le second est le nombre de caractère max à garder dans la chaîne finale.

Voilà donc pour cette petite fonction toute simple mais bien utile.

Have fun!