Un petit truc pratique lorsqu’on a à traiter une chaîne de texte dont les sections sont séparées par des sauts de ligne (\n ou \r) et qu’on désire séparer tout ça en paragraphes.

Assumons donc que nous avons un texte du genre :

$texte = "Ceci est un paragraphe \n\n En voici un
	deuxième \n\n Et finalement un troisième.";

On s’attend donc à avoir trois paragraphes enrobés de la balise <P> plutôt qu’un seul bloc qui sera converti en de multiples <br />, probablement via la fonction nl2br(). Voici donc l’expression régulière à utiliser pour nettoyer votre texte :

$texte = preg_replace("/(\r\n)+|(\n|\r)+/", "</p><p>", $texte);
$texte = '<p>' . $texte . '</p>';

Notez que si, explicitement dans votre texte, les sauts de ligne sont déjà remplacés par un <BR />, vous n’avez qu’à utiliser cette expression régulière en lieu et place de la première :

//va convertir toutes les multiples instances de <br /> ou <br> ou <BR>
$texte = preg_replace("/(<br\s*\/?[>]\s*)+/i", "</p><p>", $texte );
$texte = '<p>' . $texte . '</p>';

Dans tous les cas, une fois que vous afficherez le texte en question, il ressemblera à ceci :
<P >
Ceci est un paragraphe
</P >
<P >
En voici un deuxième
</P >
<P >
Et finalement un troisième.
</P >

Commentaires Facebook

2 commentaires pour “Convertir des sauts de lignes en paragraphes”

  • Pourquoi pas tout simplement remplacer ces sauts de lignes par des :
    $texte = str_replace(« \n », »",$texte);

    Est-ce que tu a une objection a utiliser les BR ?

    En TK, ça faisait un bout que j’étais pas aller voir ton site je pensais que c’était juste un blogue. Lache pas la patate.

  • @ Pascal : D’un point de vue sémantique, les paragraphes d’un texte doivent être entourés de leurs balises appropriées. Le terme BR (breaking row) signifiant simplement qu’on souhaite ajouter un saut de ligne forcé (comme un espace insécable – &nbsp (non-breaking space).

    Les moteurs de recherche pourront donc mieux interpréter notre contenu en appliquant cette méthode, et la mise en forme se fera avec plus de flexibilité par CSS (pensons aux :first-child qui peuvent influencer un DIV contenant plusieurs P, ou encore le text-indent qui est quasi inutile lorsqu’un texte n’est en réalité qu’un seul paragraphe).

    Donc grosso modo, oui, j’ai une objection à utiliser un BR quand c’est pas le temps d’utiliser un BR… de la même manière que j’en ai pour utiliser un SPAN quand je cherche à faire un titre (H1, H2… H6) ou une TABLE quand je veux faire une grille de design ;)

    Bref, un BR c’est un saut de ligne. Deux BR, ce sont deux sauts de lignes. Ça ne devient pas comme par magie un changement de paragraphe!

Ajouter un commentaire

Additional comments powered by BackType

Twitter @emilegirard

RSS Liens partagés

Mots-clefs

Ailleurs

Méta