#1 Le 30/11/2011, à 02:43
- cm-t
[RESOLU] [PHP-REGEX] Néttoyer toutes les occurences de style=
Bonjour
Dans un de mes développements php sur dotclear2, j'ai besoin de remplacer toutes les occurrences de 'style=' par '' (en simple : les supprimer)
Mais j'ai une contrainte: ne pas supprimer le «style=» des balises <img />
nesthib m'as déjà parlé de backreference, mais j'ai eu l'impression que ça ne me serai pas forcément utile (ou alors que n'ai pas compris, fort possible )
Voilà, donc si quelqu'un maîtrise un petit peu les regex, n'hésitez pas à m'aiguiller !
(pour ceux qui connaissent dotclear2, cela m'est utile pour nettoyer les billets qui sont rédigés depuis un copier-collé d'un quelconque éditeur qui insère du style dans le texte; sans pour autant supprimer la mise en forme des images générée depuis le wyswyg de dotclear2 (le float principalement) )
RESOLU: cf http://forum.dotclear.org/viewtopic.php?pid=310688
Dernière modification par cm-t (Le 02/12/2011, à 12:34)
Actu Ubuntu ☺/
Pauses Ubuntu sur Paris \_< -t
[(π)] La Quadrature du net
Hors ligne
#2 Le 30/11/2011, à 02:49
- sputnick
Re : [RESOLU] [PHP-REGEX] Néttoyer toutes les occurences de style=
Salut, Il s'agit des look-ahead et des look-behind en PCRE.
Un test concluant avec un negative look-behind :
<?php
$myvar = '<img style="thisIsTheStyle;" src="http://fo.bar/pouet"</img>';
$myvar2 = '<a style="thisIsTheStyle;" href="http://fo.bar/pouet">pouet</img>';
$myvar = preg_replace('/(?<!\<img) style="[^"]+"/', '', $myvar);
echo "$myvar\n";
$myvar2 = preg_replace('/(?<!\<img) style="[^"]+"/', '', $myvar2);
echo "$myvar2\n";
?>
Edit : pour modifier des balises, je te conseille plutôt des modules qui sont fait pour cela, http://www.php.net/manual/fr/domdocument.loadhtml.php par exemple.
Tu peut dire que "le style doit être nul" par exemple.
Dernière modification par sputnick (Le 30/11/2011, à 03:15)
On ne peut pas mettre d'array dans un string!
https://sputnick.fr/
Hors ligne
#3 Le 30/11/2011, à 12:44
- cm-t
Re : [RESOLU] [PHP-REGEX] Néttoyer toutes les occurences de style=
Bonjour sputnick,
merci pour cette piste
$post_content = '
<img id="more-1" style="foobar" />
<img style="foo" id="more-2" style="bar"/>
<input id="more-3" style="foobar"/>
<a style="foo;" href="http://fo.bar/pouet" style="bar;" style="foobar;">pouet</a>
<a style=\'foo;\' href="http://fo.bar/pouet" style=\'bar;\'>pouet</a>
<a style="foo;" href="http://fo.bar/pouet" style=\'bar;\'>pouet</a>
<a style="bg-img(\'foo.bar\');" href="http://fo.bar/pouet" style="bg-img(\'foo.bar\');" >pouet</a>
<a style=\'bg-img("foo.bar");\' style=\'bg-img("foo.bar");\' href="http://fo.bar/pouet" >pouet</a>
style="" ';
$pattern = '/(?<!\<img) style="[^"]+"/';
$replacement = ' ';
$post_content = preg_replace( $pattern, $replacement, $post_content );
donne:
<img id="more-1" />
<img style="foo" id="more-2" />
<input id="more-3" />
<a href="http://fo.bar/pouet" >pouet</a>
<a style='foo;' href="http://fo.bar/pouet" style='bar;'>pouet</a>
<a href="http://fo.bar/pouet" style='bar;'>pouet</a>
<a href="http://fo.bar/pouet" >pouet</a>
<a style='bg-img("foo.bar");' style='bg-img("foo.bar");' href="http://fo.bar/pouet" >pouet</a>
style=""
au lieu de:
<img id="more-1" style="foobar" />
<img style="foo" id="more-2" style="bar"/>
<input id="more-3" />
<a href="http://fo.bar/pouet">pouet</a>
<a href="http://fo.bar/pouet" >pouet</a>
<a href="http://fo.bar/pouet" >pouet</a>
<a href="http://fo.bar/pouet" >pouet</a>
<a href="http://fo.bar/pouet" >pouet</a>
style=""
Je planche dessus pour voir si je peux toucher à ça. Je ne m'attendais pas à lire et relire autant de fois la doc pour ça :'(
Actu Ubuntu ☺/
Pauses Ubuntu sur Paris \_< -t
[(π)] La Quadrature du net
Hors ligne
#4 Le 02/12/2011, à 10:44
- cm-t
Re : [RESOLU] [PHP-REGEX] Néttoyer toutes les occurences de style=
Resolu
merci
Dernière modification par cm-t (Le 02/12/2011, à 12:35)
Actu Ubuntu ☺/
Pauses Ubuntu sur Paris \_< -t
[(π)] La Quadrature du net
Hors ligne