Découpage d'un texte en fonction des sauts de lignes

Soyez le premier à donner votre avis sur cette source.

Snippet vu 3 972 fois - Téléchargée 15 fois

Contenu du snippet

Un débutant pour les débutants...
Petite histoire: en récupérant un texarea provenant d'une base de donnée pour le mettre dans un pdf (avec fpdf) je me suis retrouvé avec un texte sur une seule ligne et avec tout les " br " de visible. j'ai donc cherché à découper le texte pour en extraire les lignes indépendamment.
je m'en suis bien sortie (puisque ça fonctionne !) et je me suis dit que cela pouvais être utile à d'autre, moi j'ai découpé en fonction des " br " mais ça marchera avec autre chose.....

Source / Exemple :


<?php

// le texte en question

$area1='La psychologie des foules<br />montre à quel point les lois<br />et les institutions exercent peu<br />d action sur leur nature impulsive ';
//          0                           25    31                             60    66                                 98    104                               141

$chaine=$area1; // on assigne un variable en vu de textes différents.........

$longstring=strlen($chaine);//  récupère la longueur de la chaine de caractères

echo $chaine.'<br><br>'; // on affiche le texte

$Cptage = substr_count ($chaine, '<br />'); // récupère le nombre de <br />

$i=1; // on incrémente la variable qui va servir pour la boucle

 while($i < ($Cptage+2) ) // la variable "$i" bouclera jusqu'à atteindre le nombre de <br /> et " +2 " => parce qu'il y a une lignes avant le 1er <br /> et une après le dernier <br />
 {
$saut[$i]=$pos[$i-1]+6; //  un calcul pour " sauter " le <br /> précédent."$pos[$i-1]" et  6  est le nombre de caractères qui compose  " <br /> "

if ($pos[$i-1]==0){$saut[$i]=0;} // juste pour le démarrage sinon " erreur"

$pos[$i]=strpos($chaine,'<br />',$saut[$i]); // on repère le <br /> suivant en reprenant le comptage en tenant compte du " saut " calculé plus haut 

$jusqua[$i]=$pos[$i]-$saut[$i];  // calcul de la fin de la ligne suivante ; ex : pour la deuxième ligne => position du 2eme "<br />" = 60 moins le saut du 1er "<br />" =31 : donc 29 de " > à < "

if ($pos[$i]==""){$jusqua[$i]=$longstring;} // juste pour la dernière ligne, comme on ce repère avec les <br />, si il n'y en à pas à la fin.... on ne pourra pas extraire la dernière ligne...

$ligne[$i]=substr($chaine,$saut[$i],$jusqua[$i]); // he ben.. là on découpe la ligne en "sautant" les <br /> jusqu'au <br /> suivant...

// Histoire de voir si tout ce passe bien.....

echo 'saut'.$i.' : '.$saut[$i].'<br>';
echo 'pos'.$i.' : '.$pos[$i].'<br>';
echo 'jusqua'.$i.' : '.$jusqua[$i].'<br>';
echo 'Ligne'.$i.': '.$ligne[$i].'<br><br>';// et là, on affiche nos lignes ainsi découpées

$i++;

 }
?>

Conclusion :


C'est mon premier post, j'espère que ça aidera......................

Je n'ai pas un très haut niveau, alors n'hésitez pas à critiquer, je suis preneur..

Byby

A voir également

Ajouter un commentaire

Commentaires

cs_biloubil
Messages postés
8
Date d'inscription
samedi 19 février 2005
Statut
Membre
Dernière intervention
18 novembre 2009
-
et hopla, j'ai trouvé tout seul ( trop fort ! ( on ne rit pas !!!!) )

pour ceux que ça intéresse :

$variable1=nl2br($letexte);/* pour afficher les

$variable2=substr_count($letexte,'
');/*et pour compter les

Donc html ou xhtml, ça n'a rien à voir je pense..... c'est le
qui s'affiche

je suis très content....(je sais, il m'en faut peu)

Allez, reprenez vos lignes de code et merci pour tout....

A+
cs_biloubil
Messages postés
8
Date d'inscription
samedi 19 février 2005
Statut
Membre
Dernière intervention
18 novembre 2009
-
merci pour vos interventions.
En cas de html strict, ne faudrait-il pas oublier les
sans slash aussi ?

Effectivement je me suis pris gravement le choux, mais j'avais envies de relever le défi avec les moyens du bord..9a ma bien fait cogiter....

j'ai, par contre, beaucoup de difficultés pour compter les lignes d'un textarea provenant de sql, non pas pour l'afficher mais vraiment pour compter le nombre de ligne !!!

pouvez vous m'aider ?

Dans l'attente de vous lire...
.
.
masternico
Messages postés
494
Date d'inscription
dimanche 5 octobre 2003
Statut
Membre
Dernière intervention
1 septembre 2011
-
Attention Biboux, il ne faudrait pas enduire d'erreur (ha ha ha) notre cher ami Biloubil.
J'ai effectivement eu le même réflexe que toi pour le coup du explode, sauf qu'avec explode('
', ...) on rate les '
' et les '
' (et oui, suivant le niveau XHTML choisi, les balises auto-fermantes ne sont pas autorisées à avoir le slash... et aussi, on ne met pas toujours un espace avant le slash).

Je pense qu'il faudrait d'abord normaliser tout ça avant de lancer la moulinette:
$chaine = str_replace(array('
','
'),'
',$chaine); // comme ça on est sûr que toutes les balises 'br' valent '
'
lignes = explode('
',$chaine); // on explose la chaine

et du coup, effectivement, lignes sera un tableau dont chaque ligne est une ligne du textarea (mais sans les balise '
')
HTMLer
Messages postés
24
Date d'inscription
vendredi 19 mai 2006
Statut
Membre
Dernière intervention
3 août 2009
-
OUlalala, BIBOUX a totalement raison, avec explode c'est bien plus facile :)
Meme avec un str_replace, tu remplaces les
par des \n ;)
biboux
Messages postés
16
Date d'inscription
lundi 14 juin 2004
Statut
Membre
Dernière intervention
9 août 2010
-
Salut,
merci pour ce code mais je me trompe si je dis que tu peux faire la même chose avec la fonction explode() ??
Il me semble que la découpe se ferait ainsi :
$tab = explode("
", $area1);

Ton tableau contiendra ainsi les morceaux de ta chaine entre les balises de fin de ligne

Bonne journée à tous
Bye

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.