Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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