regex <p></p>


rudddy
WRInaute accro
WRInaute accro
 
Messages: 2570
Inscription: 1 Aoû 2007

regex <p></p>

Message le Mar Déc 01, 2009 13:36

Bonjour,

j'ai une variable $texte en BD qui commence toujours par <p> et qui se termine par </p>.

donc en gros :
Code: Tout sélectionner
$texte = '<p>bla bla .<br> coucou etc etc ...</p>';

j'aimerais faire une regex qui me convertisse :
Code: Tout sélectionner
$texte = '<p>bla bla .<br> coucou etc etc ...</p>';

en
Code: Tout sélectionner
$texte = '<p><strong>bla bla .<br> coucou etc etc ...</strong></p>';

car si je code :
Code: Tout sélectionner
$texte = '<strong>'.$texte.'</strong>';
ce n'est pas valide w3c

merci à vous


seebz
WRInaute impliqué
WRInaute impliqué
 
Messages: 808
Inscription: 15 Avr 2007

Re: regex <p></p>

Message le Mar Déc 01, 2009 14:22

Peut-être :

Code: Tout sélectionner
$texte = preg_replace('`^<p>`', '<p><strong>', $texte);
$texte = preg_replace('`</p>$`', '</strong></p>', $texte);


rudddy
WRInaute accro
WRInaute accro
 
Messages: 2570
Inscription: 1 Aoû 2007

Re: regex <p></p>

Message le Mar Déc 01, 2009 14:35

ca marche (même si je suis sûr que c'est optimisable)

merci donc et + 1reco


Julia41
WRInaute passionné
WRInaute passionné
 
Messages: 1765
Inscription: 31 Aoû 2007

Re: regex <p></p>

Message le Mar Déc 01, 2009 16:44

Code: Tout sélectionner
$rep = array('<p>' => '<p><strong>', '</p>' => '</strong></p>');
echo strtr($text, $rep);


C'est "un peu" plus optimisé, mais bon.
Edit et tant qu'on y est :
Code: Tout sélectionner
$rep = array('<p>' =>'<p><strong>', '</p>' => '</strong></p>', '<br>' => '<br />');

et ça n'a pas été testé mais "devrait" marcher.

Pour les benchmarks : http://m-fernandez.developpez.com/articles/php/bench/#LVIII

jcaron
WRInaute accro
WRInaute accro
 
Messages: 2687
Inscription: 13 Fév 2004

Re: regex <p></p>

Message le Mar Déc 01, 2009 17:30

Ton dernier ajout implique qu'il veut du XHTML, alors qu'il veut peut-être du HTML...

Jacques.


seebz
WRInaute impliqué
WRInaute impliqué
 
Messages: 808
Inscription: 15 Avr 2007

Re: regex <p></p>

Message le Mer Déc 02, 2009 10:01

strtr() risque de faire la modifiaction sur toutes les balises trouvées alors que la regex s'occupera uniquement de la première et la dernière.

Maintenant, en y réfléchissant, si rudddy ajoute le balise <strong>, je suppose que le champ ne contiendra qu'un seul paragraphe.
Du coup, la solution de Julia41 devrait être la meilleur (consommant moins de ressources car pas de regex)


rudddy
WRInaute accro
WRInaute accro
 
Messages: 2570
Inscription: 1 Aoû 2007

Re: regex <p></p>

Message le Mer Déc 02, 2009 10:39

seebz a écrit:Maintenant, en y réfléchissant, si rudddy ajoute le balise <strong>, je suppose que le champ ne contiendra qu'un seul paragraphe.


exact sinon le w3c ne sera pas content


Julia41
WRInaute passionné
WRInaute passionné
 
Messages: 1765
Inscription: 31 Aoû 2007

Re: regex <p></p>

Message le Mer Déc 02, 2009 13:17

Sinon, stocker du html dans la base de données (bien que cela se fasse), je trouve pas ça génial, tu es toujours dépendant de ce qui est dedans (preuve maintenant).

Tu pourrais utiliser la commande mysql "replace" pour nettoyer tout tes <p> et ainsi les coder en dur. Il y avait une petite faille SQL il y a quelques mois au sujet du html dans le base de données et de son execution (c'était possible qu'en ligne de commande).

Bon, fait un backup avant quand même mais la structure est la suivante :
Code: Tout sélectionner
UPDATE table SET ton_champ_txt = REPLACE(ton_champ_txt, '<p>,'');
UPDATE table SET ton_champ_txt = REPLACE(ton_champ_txt, '</p>,'');
UPDATE table SET ton_champ_txt = REPLACE(ton_champ_txt, '<br>,'<br />');


Ca te permet de faire un "gros" ménage, mais fait un backup, c'est pas testé, mais normalement c'est par défault "non sensitive". Sinon, c'est plutôt utile pour les migrations de site HTML => Strict. Je m'en étais servi lors d'un changement de parser BBCode aussi. Plutôt que de faire un parser "lourd" qui parse à chaque fois et corrige les fautes de :
strong italique mon text strong italique. Les commandes update font les replaces et au final ton site est "plus" rapide au niveau du parsing.


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités