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 :

[REGEX] Supprimer texte entre les balises <a>


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Femme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2019
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2019
    Messages : 45
    Points : 26
    Points
    26
    Par défaut [REGEX] Supprimer texte entre les balises <a>
    Bonjour,

    J'essaye de supprimer le texte qui se trouvent entre deux balises <a>, sauf que je ne trouve pas la bonne solution. Soit j'efface toute ma balise (voir code ci-dessous) soit j'efface rien.

    voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $word = '';
        foreach($results as $result)
        {
            $replaces[] = preg_replace('#<a href="(.+)">(.+)</a>#', $word, $result);
        }
    Merci de votre aide.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    montre un exemple de "texte" à traiter, et le résultat attendu.
    Ce sera plus clair.

  3. #3
    Nouveau membre du Club
    Femme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2019
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2019
    Messages : 45
    Points : 26
    Points
    26
    Par défaut
    Exemple à traiter :

    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href="#">Le texte à faire disparaitre </a>

    Résultat attendu :


  4. #4
    Invité
    Invité(e)
    Par défaut
    OK... C'est bien ce que j'avais compris.

    Alors pourquoi vouloir conserver le lien lui-même <a href="#"></a>, si il est vide ??

  5. #5
    Nouveau membre du Club
    Femme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2019
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2019
    Messages : 45
    Points : 26
    Points
    26
    Par défaut
    C'est vrai j'ai peut-être été trop radical dans mon exemple.

    Ce que je voudrais c'est pouvoir supprimer du contenu à l'intérieur de ces balises. Qu'elle soit vide ou pas au final ça n'a pas d'importance.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?php
    $string = 'dsfg dsgf<a href="#">Le texte à faire disparaitre </a> ezrgtezrt zezrtzer tert <a href="#">autre texte à faire disparaitre </a> dsqr gfsdfgsdfg .';
    $pattern = '#(<a[^>]*>)([^<]*)(<\/a>)#Ui';
    $replacement = '$1$3';
    $string_new = preg_replace($pattern, $replacement, $string);
    var_dump( $string_new );
    ?>
    On obtient
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Ausos cum Brittanniam <a href="#"></a> ferebatur ferebatur Hispania <a href="#"></a> sagax glabro perquam est.
    Si on veut supprimer AUSSI les balises :
    On obtient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Ausos cum Brittanniam  ferebatur ferebatur Hispania  sagax glabro perquam est.

  7. #7
    Nouveau membre du Club
    Femme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2019
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2019
    Messages : 45
    Points : 26
    Points
    26
    Par défaut
    Je vais tester ça merci beaucoup :

  8. #8
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 912
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 912
    Points : 6 705
    Points
    6 705
    Par défaut
    On n'édite pas du html avec des regex ni avec des fonctions texte. Il y a un outil pour ça: le DOM.

    Pour traiter un document html complet (avec des balises html, head et body):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    libxml_use_internal_errors(true);
     
    // On crée une instance de DOMDocument et on charge le HTML.
    $dom = new DOMDocument;
    $dom->loadHTML($html, LIBXML_HTML_NODEFDTD);
     
    // On crée une instance de DOMXPath pour intérroger l'arbre DOM avec XPath.
    $xp = new DOMXPath($dom);
     
    // On sélectionne tous les nœuds enfant des éléments a.
    $nodeList = $xp->query('//a/node()');
     
    // On efface cette sélection en la parcourant à l'envers
    for ($i = $nodeList->length - 1; $i > -1; $i--) {
        $nodeList->item($i)->parentNode->removeChild($nodeList->item($i));
    }
     
    $result = $dom->saveHTML();
    Pour traiter un document html partiel (sans balises html, head et body):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    libxml_use_internal_errors(true);
     
    // on place le html partiel dans une structure pour avoir un document complet.
    $wrapper = <<<HTML
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
        </head>
        <body>$html</body>
    </html>
    HTML;
     
    // Même chose
    $dom = new DOMDocument;
    $dom->loadHTML($wrapper);
     
    $xp = new DOMXPath($dom);
    $nodeList = $xp->query('//a/node()');
     
    for ($i = $nodeList->length - 1; $i > -1; $i--) {
        $nodeList->item($i)->parentNode->removeChild($nodeList->item($i));
    }
     
    // On agrège les nœuds enfant de l'élément body pour obtenir le résultat
    $result = '';
     
    foreach ($xp->query('/html/body/node()') as $childNode) {
        $result .= $dom->saveHTML($childNode);
    }

  9. #9
    Nouveau membre du Club
    Femme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2019
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2019
    Messages : 45
    Points : 26
    Points
    26
    Par défaut
    Merci beaucoup l'aide.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. La recherche s'effectue-t-elle dans le texte entre les balises [code]?
    Par franculo_caoulene dans le forum Mode d'emploi & aide aux nouveaux
    Réponses: 4
    Dernier message: 18/06/2009, 13h53
  2. [RegEx] Éliminer les liens sans texte entre les balises
    Par kabkab dans le forum Langage
    Réponses: 2
    Dernier message: 12/04/2009, 12h27
  3. [RegEx] preg_replace utiliser 2 fois le texte entre les balises BBcode
    Par Zikadonfeur dans le forum Langage
    Réponses: 4
    Dernier message: 15/07/2008, 13h22
  4. supprimer texte entre deux balises specifiques
    Par HurtMarley dans le forum Langage
    Réponses: 2
    Dernier message: 31/01/2006, 19h30
  5. [SAX] Problème SAX lecture du texte entre les balises
    Par BernardT dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 07/07/2005, 18h24

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