IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Supprimer les balises <a ... </a> d'une chaine de caractères


Sujet :

Langage PHP

  1. #1
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2004
    Messages
    318
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2004
    Messages : 318
    Points : 362
    Points
    362
    Par défaut Supprimer les balises <a ... </a> d'une chaine de caractères
    Bonjour à tous.

    Je dois "filtrer" un texte en enlevant tout les liens, et pas seulement les balises. En gros tout ce qu'il y a entre <a et </a>.
    Ca parait tout simple, mais je me bats avec depuis un moment en vain...
    J'ai bien essayé la fonction ereg_replace, mais je n'arrive pas du tout avec les expressions rationnelles.
    J'en ai essayé quelques unes mais sans grand résultat.

    Merci de votre aide

  2. #2
    Membre émérite
    Avatar de Nesmontou
    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Septembre 2004
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2004
    Messages : 1 612
    Points : 2 969
    Points
    2 969
    Par défaut
    Salut, tu peux essayer ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?php
    $pattern = '#<a[^<]*>[^<]*</a>#im';
    $subject = '<a href="test">test</a> essai <a href="test">test</a>';
     
    echo $subject . ' -> ' . preg_replace($pattern, '', $subject);
    // Affiche : <a href="test">test</a> essai <a href="test">test</a> ->  essai 
    ?>
    Bon développement
    Si vous ne pouvez expliquer un concept à un enfant de six ans, c'est que vous ne le comprenez pas complètement. Albert EINSTEIN

    F.A.Q. : Java, PHP, (X)HTML / CSS

    N'oubliez pas de cliquer sur le bouton Résolu en bas de page quand vous avez obtenu une solution à votre problème

  3. #3
    Membre habitué
    Avatar de savageman86
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    105
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 105
    Points : 199
    Points
    199
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    debut <a href="<><" onclick="bouh">bla bla</a> fin
    Ceci n'est pas transformé par ton masque...

    Ma proposition :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <?php
    $pattern = '#<a[^>]*>((?:.+?)(?=</a>)</a>|(?:.*$))#im';
    @+

  4. #4
    Inactif
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 179
    Points : 202
    Points
    202
    Par défaut
    Ma proposition :
    http://simplehtmldom.sourceforge.net

    Les expressions régulières, spa fait pour parser du html. :/

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 34
    Points : 41
    Points
    41
    Par défaut
    salut
    Citation Envoyé par savageman86 Voir le message
    Ma proposition :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <?php
    $pattern = '#<a[^>]*>((?:.+?)(?=</a>)</a>|(?:.*$))#im';
    Imagine ce que ça donnerait avec un autre élément commençant <a (abbr, acronym, address...)
    Ne fonctionnerait pas non plus si l'élément A est sur plusieurs lignes.
    Par ailleurs, à moins que quelques subtilités m'échappent, j'ai l'impression qu'on pourrait obtenir un même résultat en le simplifiant.

    Pour ma part je ferais tout simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $pattern='#<a\s.*?</a>#si';
    évidement ne marcherait pas dans des cas comme <a href=""><!--</a>--> ou <a href="" title="</a>">
    si on veut prévenir ce genre de cas improbable, on doit effectivement recourir à un vrai parseur html

Discussions similaires

  1. [RegEx] Supprimer les balises HTML
    Par Anduriel dans le forum Langage
    Réponses: 5
    Dernier message: 10/04/2008, 16h51
  2. [RegEx] Supprimer les balises <DIV *>
    Par deloo dans le forum Langage
    Réponses: 6
    Dernier message: 24/02/2008, 14h11
  3. [Système] Supprimer les balises php d'un texte
    Par madcorp dans le forum Langage
    Réponses: 6
    Dernier message: 04/03/2007, 16h48
  4. [XML] Supprimer les balises vides
    Par junior6 dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 20/09/2006, 09h34
  5. [RegEx] Supprimer les balises HTML
    Par hisy dans le forum Langage
    Réponses: 4
    Dernier message: 19/03/2006, 17h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo