Réduire un texte à n caractères sans couper de mot

Soyez le premier à donner votre avis sur cette source.

Snippet vu 4 969 fois - Téléchargée 16 fois

Contenu du snippet

Permet simplement de passer une chaîne de caractères, avec balises HTML ou pas, et de récupérer une chaîne raccourci à + ou - N caractères en fonction de la marge qui permet de ne pas couper en plein milieu d'un mot.
La longueur est à 100 caractères par défaut, la marge à 10, n'empêchant pas de les modifier dans l'appelle ou les fixer selon vos souhaits lorsque vous l'intégrerez dans votre fichier de fonctions.

Source / Exemple :


/*
Fonction qui réduit un texte $texte à $long caractère + $marge de marge pour essayer de pas couper un mot
@param string $text Contient un texte, même avec des balises HTML (qui seront retirer en sortie)
@param int $long Nombre de caractère souhaité
@param int $marge Permet de se donner une marge pour éviter de couper un mot mais aussi avoir une limite ferme
@return string

  • /
function coupeCourt($texte,$long,$marge=10){ $msg = stripslashes($texte) ; $msg = preg_replace("'<[^>]+>'U", "", trim(strip_tags($msg)) ) ; $taille = strlen($msg) ; if($long < $taille){ $message = substr($msg, 0, $long) ; $i = $long ; if ($i < $taille){ while ($msg[$i] != " " && isset($msg[$i]) && $i < ($long+$marge) ){ $message .= $msg[$i] ; $i++ ; } } if ($i < $taille){ $message .= "..." ; } }else{ $message = $msg ; } return ($message) ; }

Conclusion :


J'espère que ça ira, aidera... première contribution!
C'est un code que je me sers pour générer le contenu d'un headline actu, c'est simple mais ça peut servir!

A voir également

Ajouter un commentaire

Commentaires

Super function merci bcp
TychoBrahe
Messages postés
1309
Date d'inscription
samedi 31 janvier 2009
Statut
Membre
Dernière intervention
5 juin 2013
11 -
Salut,

Je trouve que tu te compliques bien la vie avec cette fonction. En utilisant les fonctions de traitement des chaînes de PHP on arrive au même but bien plus rapidement :

function first_words($str, $nb_chr = 20) {
$sep = '<{{--split--}}>';
return strstr(wordwrap($str, $nb_chr, $sep), $sep, true);
}
Un détail important, c'est que les fonctions de regex POSIX (ereg_replace par exemple) sont obsolètes selon la doc. Il est préférable d'utiliser les fonctions regex PCRE (preg_* et sans compter qu'il y a des avantages à utiliser PCRE)

Et perso, j'utilise plutôt ça : http://pastebin.com/1c6BTssc
Comme ça, si je dois utiliser des chaines Unicode, il me suffit de charger la librairie mbstring et de préfixer les fonctions de traitement de chaines par "mb_"

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.