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

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
Configuration: Windows XP
Firefox 3.0.10

11 réponses

  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
    1. Peut être en mettant :
      $html=eregi_replace("<a(.*)</a>", "", $html);
      1. 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
        1. ha oui
          ben quelquechose comme ca alors :
          $html=eregi_replace("(<a(.*)</a>)?", "", $html);
          1. 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>
            1. 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 >.
              1. 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
                1. 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.
              2. 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
                1. Utilise des crochets à la place des accolades, je me suis pitet planté...
              3. 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
                1. 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 !
              4. Oui, les accolades servent de quantificateur.
                Et il faut utiliser des délimiteurs dans ton expression d'où l'erreur que tu as.
                1. Oui j'ai choisi la seconde.
                  Merci pour ces explications :)
                  Elles vont m'être très utiles!
                  Bonne après-midi