Eregi_replace("<a(.*)>", "&qu

Fermé
jujucool - 28 mai 2009 à 14:32
 jujucool - 2 juin 2009 à 15:26
Bonjour,
Grâce à
$html=eregi_replace("<a(.*)>", "", $html); //$html est de la forme <table><tr><td><a....></a>...
je tente de remplacer la balise "<a border=... toto=....>" par ""
Le problème c'est que dès que la fonction trouve le 1er "<a", elle remplace tous le reste de la chaine par "" vu que mon tableau finit pas "</table>" donc par ">"
Quelqu'un a une idée? :s
Merci d'avance

11 réponses

P@t@ch0n Messages postés 565 Date d'inscription mercredi 15 avril 2009 Statut Membre Dernière intervention 28 décembre 2009 85
2 juin 2009 à 15:19
Oui, les accolades servent de quantificateur.
Et il faut utiliser des délimiteurs dans ton expression d'où l'erreur que tu as.
1
Je reformule ma question de façon plus claire :
J'ai une chaine :
$str="<p><a .......>XXXXXX</a></p>"

Je veux remplacer "<a .......>" par "" (rien), et je n'arrive pas avec eregi_replace()...
Encore merci d'avance pour votre aide
0
jeangilles Messages postés 816 Date d'inscription samedi 21 juin 2008 Statut Membre Dernière intervention 17 juillet 2012 185
28 mai 2009 à 15:13
Peut être en mettant :
$html=eregi_replace("<a(.*)</a>", "", $html);
0
Je n'y avais pas pensé merci
Mais maintenant le problème c'est qu'il s'arête au dernier </a> car en fait c'est un tableau de la forme :
<table>
<tr>
<th>
<a ....>...</a>
</th>
<th>
<a ....> ...</a>
</th>
...

Je voudrais juste qu'il supprime l'intérieur de la balise et non du 1er <a> au dernier </a> trouvé... :(
Merci pour ton aide
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jeangilles Messages postés 816 Date d'inscription samedi 21 juin 2008 Statut Membre Dernière intervention 17 juillet 2012 185
28 mai 2009 à 15:31
ha oui
ben quelquechose comme ca alors :
$html=eregi_replace("(<a(.*)</a>)?", "", $html);
0
J'ai toujours le même problème, ça me remplace :

<a ....>...</a>
</th>
<th>
<a ....> ...</gras></a></gras>

au lieu de chaque :

<a ....>...</a>
0
pyschopathe Messages postés 1963 Date d'inscription dimanche 2 mars 2008 Statut Membre Dernière intervention 22 mars 2010 137
2 juin 2009 à 12:35
Fais plutôt :
$html = eregi_replace( '<a.*?>', '', $html );
ou
$html = eregi_replace( '<a{^>}*>', '', $html );
Les deux reviennent au même et indiquent que tu dois consommer tous les caractères sauf >.
0
Merci pour ta réponse,
J'ai essayé le 1er mais ça ne marche pas vu qu'il y a "?>" dans l'expression régulière.
J'ai essayé le 2d également, mais ça n'a aucun effet sur ma chaîne...
J'ai un peu de mal à comprendre
0
pyschopathe Messages postés 1963 Date d'inscription dimanche 2 mars 2008 Statut Membre Dernière intervention 22 mars 2010 137
2 juin 2009 à 14:37
Essaie d'utiliser preg_replace au lieu de ereg_replace... Par contre, je ne crois pas qu'il y ait une version case insensitive, il faudra adapter si ça pose problème.
0
Oui j'adapterai si cela ne fonctionne pas
Par contre, quand je lance le script, j'ai le message :

Warning: preg_replace() [function.preg-replace]: Unknown modifier '}'

Je n'ai pas trouvé d'équivalent pour cette fonction
0
pyschopathe Messages postés 1963 Date d'inscription dimanche 2 mars 2008 Statut Membre Dernière intervention 22 mars 2010 137
2 juin 2009 à 15:10
Utilise des crochets à la place des accolades, je me suis pitet planté...
0
Merci infiniment ça marche! :)

par contre est ce que je pourrais avoir quelques explications sur la syntaxte du premier paramètre stp?

Merci encore et bonne journée
0
pyschopathe Messages postés 1963 Date d'inscription dimanche 2 mars 2008 Statut Membre Dernière intervention 22 mars 2010 137
2 juin 2009 à 15:23
Tu as choisi la seconde syntaxe ?
Les crochets délimitent un groupe, l'accent circonflexe exprime la négation. Donc tu as un groupe qui regroupe tous les caractères sauf '>'. L'étoile indique une répétition 0 à n fois.

Les accolades permettent de définir une quantité, rien à voir donc avec ce que tu voulais, désolé pour la boulette !
0
Oui j'ai choisi la seconde.
Merci pour ces explications :)
Elles vont m'être très utiles!
Bonne après-midi
0