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 dans une balise href [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 31
    Points : 24
    Points
    24
    Par défaut preg_replace dans une balise href
    Bonjour,

    J'ai une adresse url généré par document.write() de type :
    <a href=\'http://www.google.fr\' target=\'_blank\'>Google</a>

    Je voudrais pouvoir remplacer uniquement le href de sorte d'avoir au final :
    <a href=\'http://www.monsite.com\' target=\'_blank\'>Google</a>

    Petite précision, je ne pas contrôler l'url séparé par des \' sinon j'aurais déjà simplifier la chose.


    Voici un petit bout de mon code qui me permet déjà de traiter les url avec des doubles quotes ou des simples quotes :

    function test($url) {
    return 'href="'.urlencode($url)."'";
    }

    $content = preg_replace('/href=["\'](.*?)["\']/e', 'test("$1")', $content);

    Je bute seulement sur l'expression \' , j'ai beau chercher je n'arrive pas à trouver le moyen de lui faire chercher cette expression.

    Un petit exemple ne serais pas de refus

    Dans l'attente d'une réponse de votre part !

    Cordialement.

  2. #2
    Membre émérite

    Homme Profil pro
    Expert PHP
    Inscrit en
    Novembre 2004
    Messages
    2 127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 127
    Points : 2 557
    Points
    2 557
    Par défaut
    Hmm... j'ai pas tout pigé :
    document.write --> javascript
    preg_replace --> PHP

    Donc si tu veux modifier un truc généré par du javascript en PHP, ça va pas le faire

    Donc je dois pas avoir tout pigé, tu peux être plus explicite ? Et utilise les balises CODES stp, merci

  3. #3
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    J'ai horreur des anti slashes !

    Il on tendance à se déplacer en troupeau !

    Code une horrible regex qui devrait le faire : Sélectionner tout - Visualiser dans une fenêtre à part
    $pattern = '/href= (?: " | \\\\\' ) (.+?) (?: " | \\\ )/x';
    Pour le guillemets de droite, je ne teste que l'antislash, ça suffit à mon avis, et ça allège l'expression de quelques barres obliques.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 31
    Points : 24
    Points
    24
    Par défaut
    Re,

    Alors oui désolé je recommence avec des explications plus clair :

    Je charge dans une variable php le contenu d'une page, le code source de cette page est généré par du javascript avec l'instruction document.write() cette page n'est pas la mienne donc je n'ai aucun contrôle dessus.

    Je dois pouvoir extraire chaque balise href= et remplacer son contenu par une adresse perso, donc en détail voici un extrait du code source de la page :

    Code source de la page : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <a href=\'http://numberone-search.com\' target=\'_context\' > etc...

    Ce que je voudrais faire c'est donc remplacer l'URL par une autre, ex :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <a href=\'http://www.google.com\' target=\'_context\' > etc...
    Donc pouvoir rechercher avec un preg_replace l'expression exact \'


    Je me suis déjà développé un petit outil pour le faire, celui-ci marche très bien pour les doubles et les simples quotes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    function test($url) {
    return 'href="'.urlencode($url)."'";
    }
     
    $contenu = preg_replace('/href=["\'](.*?)["\']/e', 'test("$1")', $contenu);
    Je bute uniquement sur cette expression \' que la personne ne veut pas modifier et transformer dans sa page en double ou simple quote.

    Je n'arrive pas à trouver le moyen de l'intégrer dans le regex.

    Voila toute l'histoire

  5. #5
    Membre émérite

    Homme Profil pro
    Expert PHP
    Inscrit en
    Novembre 2004
    Messages
    2 127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 127
    Points : 2 557
    Points
    2 557
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo preg_replace("#href=('|\"|\\\\\')(.*?)('|\"|\\\\\')#", 'test', $texte)
    Devrait marcher, mais bon ça devient compliquer ton histoire

  6. #6
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Je ne vois pas à quoi sert de réutiliser $1 puisque justement tu veux le remplacer par autre chose.

    J'ai testé ça par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <?php
     
    $myString = "<a href=\'http://www.google.fr\' target=\'_blank\'>Google</a>";
    $pattern = '/href= (?: " | \\\\\' ) (.+?) ( " | \\\ )/xe';
    print $myString=  preg_replace($pattern, "test()", $myString);
     
    function test() {
        return "href='http://". urlencode('www.developpez.com') ."'";
    }
    ou ça, plus paramétrable

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?php
     
    $myUrlQueJeVeux = "www.developpez.com";
    $myString = "<a href=\"http://www.google.fr\" target=\'_blank\'>Google</a>";
    $pattern = '/href= (?: " | \\\\\' ) (.+?) ( " | \\\ )/xe';
    print $myString=  preg_replace($pattern, "test('$myUrlQueJeVeux')", $myString);
     
    function test($url) {
        return "href='http://". urlencode($url) ."'";
    }

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 31
    Points : 24
    Points
    24
    Par défaut
    Re,

    Merci en tout cas pour la rapidité de vos réponses et l'efficacité

    Cordialement

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

Discussions similaires

  1. onClick dans une balise <a href>
    Par coshibe dans le forum Général JavaScript
    Réponses: 20
    Dernier message: 17/11/2011, 16h24
  2. dans une balise A, vaut-il mieux mettre le javascript dans href ou dans onclick ?
    Par clavier12AZQSWX dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 08/10/2010, 12h04
  3. Réponses: 8
    Dernier message: 15/05/2006, 15h09
  4. problème xsl : inclure une donnée xml dans une balise html
    Par djodjo dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 03/01/2003, 09h24
  5. [XSLT] inclure du XSL dans une balise html
    Par iaa dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 05/08/2002, 15h57

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