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 :

preg_replace pour désactivation de lien


Sujet :

Langage PHP

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 101
    Par défaut preg_replace pour désactivation de lien
    Bonjour

    J'essaye de désactiver(supprimer) des liens avec preg_replace :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href="cible.html" target="_top">blablabla</a>
    doit devenir


    Voilà la tête de ma regex, qui n'a pas l'air d'être bonne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $contenu = preg_replace("~<a href=\"".$lien.".html\">([[:graph:]]{1,})</a>~", '$1', $contenu) ;

  2. #2
    Membre confirmé
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Janvier 2005
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 101
    Par défaut
    J'essaierais ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $contenu = preg_replace("~<a[^>]*>([^<]+)</a>~i", '$1', $contenu) ;

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 101
    Par défaut
    oui, mais je ne veux remplacer que les liens dont la destination est $lien !

  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

  5. #5
    Membre confirmé
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Janvier 2005
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 101
    Par défaut
    ah dans ce cas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $contenu = preg_replace('~<a href="'.$lien.'"([^<]*)>([^<]+)</a>~i', '$1', $contenu) ;

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 101
    Par défaut
    Désolé ça ne marche pas. Le script ne remplace rien du tout.

    Voilà à quoi ressemblent les liens :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href="101000.html"><img src="../medias/b.gif" border="0"></a>
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href="101222.html">blablabla</a>

    Le script récupère l'ensemble des liens dans $contenu puis vérifie leur validité (fontion rubrique_client). S'il est non valide, il doit le supprimer avec un preg_replace en concervant le texte ou l'image :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
    preg_match_all("~([[:digit:]]{1,10}).html~", $contenu, $matches, PREG_OFFSET_CAPTURE) ;
     
    for ( $i = 0 ; $i < count($matches[0]) ; $i++ ) {
     
    	$lien = $matches[0][$i][0] ;
    	$rub = substr($lien,0,3) ;
    	if ( !rubrique_client($rub,$idClient ) ) {
    		//echo $lien."<br />" ;
    		$contenu = preg_replace('~<a href="'.$lien.'"([^<]*)>([^<]+)</a>~i', '$1', $contenu) ;
    		//$contenu = preg_replace('~<a href="'.$lien.'"([[:graph:]]{1,})>([[:graph:]]{1,})</a>~', '$1', $contenu) ;
    	}
    }
    Ce qui est récupéré dans $lien est bien de la forme "101000.html".

    Merci si vous avez une idée.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 101
    Par défaut
    En fait cela fonctionne bien si la balise <a> n'enferme que du texte.
    Mais si on y trouve d'autres balises (<br />, <span> ou <img>) cela ne fonctionne pas.

    Comment modifier la regex ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $contenu = preg_replace('~<a href="'.$lien.'"([^<]*)>([^<]+)</a>~i', '$2', $contenu) ;
    En fait comment écrire dans la deuxième parenthèse, tout sauf </a> ?

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 179
    Par défaut
    Les regexp ne sont pas faîtes pour ça, y aura toujours des cas foireux.

    Le lien que je te donne au dessus te permet de t'en sortir de façon clean, avec un outil qui existe pour ça (DOM).

Discussions similaires

  1. Désactiver le lien pour la page courante
    Par breizhgen dans le forum Langage
    Réponses: 7
    Dernier message: 10/08/2007, 13h30
  2. Réponses: 2
    Dernier message: 19/12/2005, 15h52
  3. [HTML]alt / title pour les images, liens sous firefox
    Par cynferdd dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 27/10/2005, 16h39
  4. erreur code pour désactiver molette souris.
    Par rangernoir dans le forum Access
    Réponses: 2
    Dernier message: 27/09/2005, 10h14
  5. quelle balise pour établir un lien interne
    Par christopher dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 08/12/2004, 13h48

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