[php] couper un texte lors de l'affichage

Nouveau WRInaute
Bonjour,

je souhaiterai n'afficher qu'une partie de mon texte issu d'une bdd. J'ai trouvé les fonction wordwrap, mais cela ne convient pas et je n'arrive pas à l'appliquer.
Dans l'idéal ce serait de pouvoir couper à 300 mots sans césure au milieu d'un terme.

Code:
        <?php
		$sql = ' SELECT * FROM bio WHERE statut=1 ORDER BY bio.date DESC LIMIT 4 ' ;
		// on envoie la requete
		$req = query($sql) or die('Erreur SQL !'.$sql.''.mysql_error());
		// on fait une boucle qui va faire un tour pour chaque enregistrement
		while($data = mysql_fetch_assoc($req))
		{
		$urlfriendly= strtolower(strtr($data['nickGB'], "ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ ", "aaaaaaaaaaaaooooooooooooeeeeeeeecciiiiiiiiuuuuuuuuynn-"));
		// on affiche les informations de l'enregistrement en cours
		echo '<tr><td width=\"60\"><img src="images/avatars/'.$data['image'].'.jpg" width="35" height="35" alt="'.$data['nickFR'].'"></td><td><a href="bio.php?id='.$data['id'].'&bio='.$urlfriendly.'">'.$data['nickFR'].'</a> - modifiée le : '.$data['date'].' </td></tr><tr><td></td><td>'.$data['shortdesc'].'</td></tr>';
		}
		?>

merci de votre aide.
 
WRInaute accro
Alors je verrais bien un truc du style :

Code:
function shortdesc($chaine){

	$newChaine=explode(" ",$chaine);	
	$shortDesc='';

	$c=0;
	while(isset($newChaine[$c])){
		if(strlen($shortDesc." ".$newChaine[$c])<=300){
			$shortDesc=$shortDesc." ".$newChaine[$c];
		}
		else break;
		$c++;
	}
	return $shortDesc;
}

et on appelle :

Code:
$data['shortdesc']=shortdesc($data['tontexteacouper']);
 
Nouveau WRInaute
Je ne comprends pas : shortdesc($data['tontexteacouper' car je suis sensé appeler un champ (shortdesc) de ma table. comment puisje afficher un "tontexteacouper"?

Clo
 
WRInaute accro
Ah ok, tu a déjà une description courte dans ta bdd

Code:
$data['shortdesc']=shortdesc($data['shortdesc']);

Et j'avais mal lu ton truc, vu que ma fonction doit coupé à 300 caractères et pas à 300 mots, donc, ça serait plutôt un truc du style :

Code:
function shortdesc($chaine){

   $newChaine=explode(" ",$chaine);   
   $shortDesc='';

   $c=0;
   while(isset($newChaine[$c]) && $c<300){
         $shortDesc=$shortDesc." ".$newChaine[$c];
         $c++;
   }
   return $shortDesc;
}

Bon après, y'a surement mieux comme solution, moi je code à l'arrache là...
 
Nouveau WRInaute
Je l'avais vu et regardé avec attention, mais je n'ai pas vu/su comment l'installer par rapport à ma problématique en fait.

clo
 
WRInaute occasionnel
Hello :
Moi j'utilise ça :

Code:
$txt = strip_tags($data['shortdesc']);
$lg_max = 300; //nombre de caractères 

if (strlen($txt) > $lg_max)
    {
    $txt = substr($txt, 0, $lg_max);
    $last_space = strrpos($txt, " ");
    $txt= substr($txt, 0, $last_space)."...";
    }

EDIT : ah pardon, je n'avais pas vu ton besoin de césure à 300 mots et non 300 caractères
 
WRInaute occasionnel
Voici la fonction que tu cherches :

Code:
function Tronquer_Texte ( $texte, $nbchar ) {
	return (strlen($texte) > $nbchar ? substr(substr($texte,0,$nbchar),0,strrpos(substr($texte,0,$nbchar)," "))."..." : $texte);
}
Elle est écrite sur une ligne.

En premier paramètre, tu passe le texte à traiter, et en second le nombre de caractères où tu veux tronquer.

La fonction te rajoute trois petits points à la fin de ta chaine (etc), mais tu peux mettre ce que tu veux, par exemple un lien lire la suite, auquel cas tu peux ajouter un troisième paramètre à la fonction.
 
WRInaute accro
Amusant j'ai le meme code et pourtant je l'ai fait moi même... !
Code:
// TRONQUER TEXTE
 function Tronquer_Texte($texte, $longeur_max)
{
    if (strlen($texte) > $longeur_max)
    {
    $texte = substr($texte, 0, $longeur_max);
    $dernier_espace = strrpos($texte," ");
    $texte = substr($texte, 0, $dernier_espace)."...";
    }

    return $texte;
}

Pour tronquer en nombre de mots, utilise explode() ;)
 
WRInaute occasionnel
Le code que j'utilise n'est pas de moi, j'ai du le modifier un peu (je sais plus), ce qui explique peut être certaines similitudes. Peut être que tu t'es inspiré de codes existants, il y en a des tas pour faire ça.

En tout cas c'est ce que j'ai trouvé de mieux pour gérer le tronquage d'un texte proprement.
 
WRInaute accro
en faisant attention à ne pas couper au milieu de balises, genre <a>, <div>, ... ou entre l'ouvrante et la fermante
 
Nouveau WRInaute
Salut ,
voici une alternative si ça vous intéresse :

Code:
//la chaine de plus de 300 mots
$machaine ="bonjour a tous bla bla bla .. ";
//on la coupe au niveau des espace , on recupére dans un tableau
$tmots = explode(' ',$machaine);
//ou coupe notre tableau afin de n'avoir que 300 valeurs 
$tnewChaine = array_slice($tmots, 0, 300);
//on recolle la chaine
$newChaine = implode( ' ',$newChaine);

Good luck ,

Ch.
 
Discussions similaires
Haut