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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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> ?

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