regex <p></p>

WRInaute passionné
Bonjour,

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

donc en gros :
Code:
$texte = '<p>bla bla .<br> coucou etc etc ...</p>';
j'aimerais faire une regex qui me convertisse :
Code:
$texte = '<p>bla bla .<br> coucou etc etc ...</p>';
en
Code:
$texte = '<p><strong>bla bla .<br> coucou etc etc ...</strong></p>';
car si je code :
Code:
$texte = '<strong>'.$texte.'</strong>';
ce n'est pas valide w3c

merci à vous
 
WRInaute impliqué
Peut-être :

Code:
$texte = preg_replace('`^<p>`', '<p><strong>', $texte);
$texte = preg_replace('`</p>$`', '</strong></p>', $texte);
 
WRInaute impliqué
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)
 
WRInaute passionné
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:
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.
 
Discussions similaires
Haut