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 :

Condition pour différencier des liens


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 81
    Points : 48
    Points
    48
    Par défaut Condition pour différencier des liens
    Bonjour,

    Je reviens vers vous car je voudrais trouver une solution à un problème.

    Grâce à vous j'ai pu utiliser ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ligne=str_replace("href=\"","href=\"../mon_cms/",$ligne);
    Le code globale est celui-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?php
    $fichier = fopen("../mon_cms/cms_data/viemu_motdumaire.txt", "r");
    while(!feof($fichier))
    {
    $ligne = fgets($fichier);
    // modification des liens à la volé
    $ligne=str_replace("href=\"","href=\"../mon_cms/",$ligne);
    $ligne=str_replace("src=\"","src=\"../mon_cms/",$ligne);
    echo $ligne;
    }
    fclose($fichier);
    ?>
    Ce dernier me permettant de faire fonctionner des liens internes depuis des fichiers qui sont situé dans un dossier parallèle au dossier du CMS.
    Cela transforme un lien de cette façon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <a href="cmsfiles/3.jpg"> test </a>
    <a href="../mon_cms/cmsfiles/3.jpg"> test </a>
    Jusque là tout va bien.

    Par contre si j'insère un lien externe je vais avoir:
    http://monsite/mon_cms/http://www.monlien_externe.com
    au lieu de
    http://www.monlien_externe.com

    Ce qui est logique puisque je lui demande de changer la chaîne de caractère.

    Ma question est donc, comment formuler en PHP la condition suivante :

    Si
    http://www
    alors
    ne remplace pas la chaîne de caractère

    Cordialement
    Philippe Rivière.

  2. #2
    Membre confirmé Avatar de Katachana
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    755
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Avril 2007
    Messages : 755
    Points : 503
    Points
    503
    Par défaut
    Tu peux faire ca par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (ereg(http://www,$var))
    {
    ........
    }

  3. #3
    Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 81
    Points : 48
    Points
    48
    Par défaut
    Ok merci, j'ai cherché comment fonctionnait la fonction ereg.
    J'ai pas tout compris, mais voilà à quoi j'arrive :


    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
    <?php
    $fichier = fopen("../mon_cms/cms_data/viemu_motdumaire.txt", "r");
    while(!feof($fichier))
    {
    $ligne = fgets($fichier);
     
    if (ereg(http://www,$ligne))
    {echo $ligne;}
    else
    {$ligne=str_replace("href=\"","href=\"../mon_cms/",$ligne);
    $ligne=str_replace("src=\"","src=\"../mon_cms/",$ligne);
    echo $ligne;}
     
    }
    fclose($fichier);
    ?>
    Mais je sent que c'est faux...
    (là je ne suis pas sur place pour vérifier).

    Citation Envoyé par Katachana Voir le message
    Tu peux faire ca par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (ereg(http://www,$var))
    {
    ........
    }

  4. #4
    Membre confirmé Avatar de Katachana
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    755
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Avril 2007
    Messages : 755
    Points : 503
    Points
    503
    Par défaut
    il faut juste que tu mettes la chaine à rechercher entre guillemet , et vérifie au niveau des caractères / et : s'il ne faut pas les précéder de \

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (ereg("http://www",$ligne))

  5. #5
    Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 81
    Points : 48
    Points
    48
    Par défaut
    ok merci, ce qui donne globalement ça : ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if (ereg("http://www",$ligne))
    {echo $ligne;}
    else
    {$ligne=str_replace("href=\"","href=\"../mon_cms/",$ligne);
    $ligne=str_replace("src=\"","src=\"../mon_cms/",$ligne);
    echo $ligne;}

    Citation Envoyé par Katachana Voir le message
    il faut juste que tu mettes la chaine à rechercher entre guillemet , et vérifie au niveau des caractères / et : s'il ne faut pas les précéder de \

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (ereg("http://www",$ligne))

  6. #6
    Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 81
    Points : 48
    Points
    48
    Par défaut
    Je viens de faire le test et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if (ereg("http",$ligne))
    {echo $ligne;}
    else
    {$ligne=str_replace("href=\"","href=\"../mon_cms/",$ligne);
    $ligne=str_replace("src=\"","src=\"../mon_cms/",$ligne);
    echo $ligne;}
    Fait que soit ça marche avec les liens externes avec un http soit ça marche avec les lien interne en remplaçant la chaine par "../mon_cms/".

    Mais comment exprimer en php que l'on veut les deux conditions à la fois, cad les liens internes cohabitant avec les liens externe ?

    Soit exprimer la chose suivante :
    Si
    Apres href tu trouves http
    alors
    ne fais rien
    Sinon
    Rajoutes apres href "../mon_cms"

  7. #7
    Membre confirmé Avatar de Katachana
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    755
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Avril 2007
    Messages : 755
    Points : 503
    Points
    503
    Par défaut
    En utilisant else if

  8. #8
    Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 81
    Points : 48
    Points
    48
    Par défaut
    Merci maitre Yoda, mais je ne capte pas... je ne trouve pas ce que je dois mettre dans le "?" :
    else if (?) {}

    En reprenant le code il me semble qu'il faudrait lui dire : "rajoutes après href "../mon_cms" sauf si après href tu trouves "http".



    Citation Envoyé par Katachana Voir le message
    En utilisant else if

  9. #9
    Membre averti Avatar de BornBanane
    Homme Profil pro
    dev
    Inscrit en
    Mars 2007
    Messages
    284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : dev

    Informations forums :
    Inscription : Mars 2007
    Messages : 284
    Points : 416
    Points
    416
    Par défaut
    Je ferais comme ceci :
    En utilisant une regexp : le (?!http) précise que href= ne doit pas être suivit par http.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?php
    $fichier = fopen("../mon_cms/cms_data/viemu_motdumaire.txt", "r");
    while(!feof($fichier))
    {
    $ligne = fgets($fichier);
    // modification des liens à la volé
    //$ligne=str_replace("href=\"","href=\"../mon_cms/",$ligne);
    $ligne=preg_replace('`(href=")(?!http)(.+?)(")`','$1../mon_cms/$2$3',$ligne);
    $ligne=str_replace("src=\"","src=\"../mon_cms/",$ligne);
    echo $ligne;
    }
    fclose($fichier);
    ?>
    Smiley de Plomb 2009
    Anciennement FrancoisIT

  10. #10
    Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 81
    Points : 48
    Points
    48
    Par défaut Code testé et ok
    Merci François, ce code m'a l'air d'être ce qu'il me faut, je testerai cela demain matin.

    Je viens de le tester et ça marche nickel.
    Par contre je n'arrive pas comprendre totalement le code.
    Notamment au niveau des $1 $2 $3.
    J'ai cherché sur internet des infos sur preg_replace, mais les exemples que j'ai trouvé ne m'ont pas permis de comprendre la spécificité de ton code.

    Quelles sont les notions que je dois connaître, en plus de preg_replace, pour réussir à générer moi même ce genre de code ?

    Citation Envoyé par francoisIT Voir le message
    Je ferais comme ceci :
    En utilisant une regexp : le (?!http) précise que href= ne doit pas être suivit par http.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?php
    $fichier = fopen("../mon_cms/cms_data/viemu_motdumaire.txt", "r");
    while(!feof($fichier))
    {
    $ligne = fgets($fichier);
    // modification des liens à la volé
    //$ligne=str_replace("href=\"","href=\"../mon_cms/",$ligne);
    $ligne=preg_replace('`(href=")(?!http)(.+?)(")`','$1../mon_cms/$2$3',$ligne);
    $ligne=str_replace("src=\"","src=\"../mon_cms/",$ligne);
    echo $ligne;
    }
    fclose($fichier);
    ?>

  11. #11
    Membre confirmé Avatar de Katachana
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    755
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Avril 2007
    Messages : 755
    Points : 503
    Points
    503
    Par défaut
    Il faut que tu te penches sur les expressions régulière.

  12. #12
    Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 81
    Points : 48
    Points
    48
    Par défaut
    Ok merci je vais regarder de ce coté.

    Citation Envoyé par Katachana Voir le message
    Il faut que tu te penches sur les expressions régulière.

  13. #13
    Membre averti Avatar de BornBanane
    Homme Profil pro
    dev
    Inscrit en
    Mars 2007
    Messages
    284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : dev

    Informations forums :
    Inscription : Mars 2007
    Messages : 284
    Points : 416
    Points
    416
    Par défaut
    Alors les $1 $2 $3 correspondent au expressions entre parenthèse dans l'expression régulière. Sauf que ici le (?!http) est un peu particulier car c'est une sorte de condition et donc n'est pas compté.

    $1 => (href=")
    $2 => (.+?)
    $3 => (")

    Une site sympas pour les expressions régulières : http://www.regular-expressions.info/
    Smiley de Plomb 2009
    Anciennement FrancoisIT

  14. #14
    Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 81
    Points : 48
    Points
    48
    Par défaut
    Ok merci

    Citation Envoyé par francoisIT Voir le message
    Alors les $1 $2 $3 correspondent au expressions entre parenthèse dans l'expression régulière. Sauf que ici le (?!http) est un peu particulier car c'est une sorte de condition et donc n'est pas compté.

    $1 => (href=")
    $2 => (.+?)
    $3 => (")

    Une site sympas pour les expressions régulières : http://www.regular-expressions.info/

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

Discussions similaires

  1. Problème synthaxe pour récuperer des liens (HTML)
    Par stansoad0108 dans le forum Langage
    Réponses: 3
    Dernier message: 25/04/2008, 16h37
  2. condition pour colorer des cellules
    Par emillio dans le forum Excel
    Réponses: 18
    Dernier message: 15/03/2008, 07h34
  3. [RegEx] Exclure une chaine dans un motif, pour extraire des liens html
    Par Dimitri01 dans le forum Langage
    Réponses: 4
    Dernier message: 09/11/2007, 16h40
  4. [FTP] Qui a le scrit pour créer des liens automatiques ?
    Par JackBeauregard dans le forum Langage
    Réponses: 4
    Dernier message: 03/07/2006, 20h37
  5. [débutante]utiliser les classes css pour surligner des liens
    Par Mitaka dans le forum Général JavaScript
    Réponses: 18
    Dernier message: 06/01/2006, 09h37

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