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 qui enlève les liens mais garde le texte [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 412
    Points : 145
    Points
    145
    Par défaut regex qui enlève les liens mais garde le texte
    bonjour,

    j'ai cette regex qui me supprime les liens

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo preg_replace("/<a href(.*?)<\/a>/si", "", $text);
    ça marche bien mais mon problème est que ça supprime le texte ou il y'a le lien

    par exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href="http://www.toto.fr">exemple</a>

    il m’enlève bien la balise <a href> mais aussi le texte "exemple"

    y'a t'il un moyen de virer les liens en gardant le texte du lien

    merci de votre aide

  2. #2
    Membre habitué
    Homme Profil pro
    Webmaster
    Inscrit en
    Novembre 2010
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2010
    Messages : 111
    Points : 152
    Points
    152
    Par défaut
    Salut,


    Function called:
    preg_match('#<a href=".+">(.+)<\/a>#', '<a href="http://www.toto.fr">exemple</a>');

    Function returned:
    int(1)

    Resultset:
    Array
    (
    [0] => <a href="http://www.toto.fr">exemple</a>
    [1] => exemple
    )

  3. #3
    Membre éprouvé Avatar de vorace
    Homme Profil pro
    Développeur
    Inscrit en
    Août 2010
    Messages
    573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Août 2010
    Messages : 573
    Points : 915
    Points
    915
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo preg_replace("/<a href(.*?)>(.*)<\/a>/si", '$2', $text);

  4. #4
    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
    Bonjour,

    Je pense qu'il vaudrait mieux utiliser l'expression régulière suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?php
    $str = 'test <a href="http://www.developpez.com">lien</a> test <a href="http://www.developpez.com">lien</a> test';
    echo preg_replace('#<a[^>]*>([^<]*)</a>#i', '$1', $str);
    ?>

  5. #5
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    pour ceux qui aiment la simplicité y'a strip_tags...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $str = 'test <a href="http://www.developpez.com">lien</a> test <a href="http://www.developpez.com">lien</a> test';
    echo strip_tags($str);
    sinon encore une fois pour parser du HTML c'est DOMDocument

  6. #6
    Membre éclairé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2011
    Messages
    411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 411
    Points : 735
    Points
    735
    Par défaut
    Je ne peux que plussoyer stealth35 pour le coup. Les 2 solutions que j'aurais données =)

    Pour les anglophones : http://nu.x10.bz/regexhtml

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 412
    Points : 145
    Points
    145
    Par défaut
    merci pour vos réponses

    j'ai testé la solution strip_tags de stealth35 , ça fonctionne , mais ça enlève les autres balises ( retour à la ligne etc..) du coup le texte perds sa mise en forme

    est ce que l'on peut mettre des options avec strip_tags , genre n'enlever que les balises <a> ?



    la solution de Nesmontou fonctionne avec l'exemple donné mais moi j'ai un lien de ce type

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <A href="/la_page_toto.html?varid=01&amp;var2ID=002" target=_self><STRONG><FONT color=#0000ff>exemple</FONT></STRONG></A>
    et la ça ne fonctionne pas il laisse les liens

    je n'ai pas testé les autres solutions , ce que je vais faire

    encore merci

  8. #8
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    ça se règle dans le 2eme paramètre de strip_tags il faut mettre les balises que tu gardes

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 412
    Points : 145
    Points
    145
    Par défaut
    pour la solution de vorace

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	echo preg_replace("/<a href(.*?)>(.*)<\/a>/si", '$2', $text);

    avec ce texte

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <P>avec <STRONG>25 </STRONG><A href="/sitetoto.html?nodeID=20&amp;varID=03" target=_self><STRONG><FONT color=#0000ff>parcs sauvage</FONT></STRONG></A>  il est composé  de territoires emblématiques et <A href="/zozo.html?varID=952" target=_self><FONT color=#0000ff>magniquement</FONT></A> naturel

    sur ce lien

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <A href="/sitetoto.html?nodeID=20&amp;varID=03" target=_self><STRONG><FONT color=#0000ff>parcs sauvage</FONT></STRONG></A>

    ça fonctionne il enlève le lien en laissant le texte

    par contre dans la suite du texte

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    il est composé  de territoires emblématiques et <A href="/zozo.html?varID=952" target=_self><FONT color=#0000ff>magniquement</FONT></A> naturel,


    il laisse le lien

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 412
    Points : 145
    Points
    145
    Par défaut
    merci stealth35

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    j'ai fait echo strip_tags($text, '<p><br/>');

    ça fonctionne nickel

    encore merci

    question subsidiaire , je voudrais enlever la chaine de caractères suivante

    Retour haut de page >>

    encore merci pour la solution

  11. #11
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    avec str_replace

  12. #12
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 412
    Points : 145
    Points
    145
    Par défaut
    merci stealth35

    j'ai fait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $text = strip_tags($text, '<p><br/><STRONG>');
     
     $degage = array("Retour haut de page >>");
    $text = str_replace($degage, "", $text );
     
    echo $text ;
    peut être un peu compliqué mais ça marche !

  13. #13
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    pas besoin d'array

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $text = strip_tags($text, '<p><br><strong>');
     
    $degage = 'Retour haut de page >>';
    $text = str_replace($degage, '', $text );
     
    echo $text ;

  14. #14
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 412
    Points : 145
    Points
    145
    Par défaut
    merci !

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

Discussions similaires

  1. RegEx pour extraire les liens d'une page html
    Par herch dans le forum API standards et tierces
    Réponses: 7
    Dernier message: 13/05/2009, 17h26
  2. Méthodes qui enlève les espaces debut et fin d'une chaîne
    Par magiklife dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 31/07/2008, 08h49
  3. [scriptksh] recherche un script qui enlève les ^M
    Par hokidoki dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 26/10/2007, 15h40
  4. Fonction qui detecte les liens morts
    Par Death83 dans le forum Langage
    Réponses: 9
    Dernier message: 17/10/2006, 18h39
  5. CSS : Bordure sur les liens mais pas sur les images ?
    Par monstroplante dans le forum Mise en page CSS
    Réponses: 1
    Dernier message: 04/02/2006, 14h18

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