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 :

bblien qui ne fonctionne pas [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre éprouvé
    Avatar de méphistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Points : 1 220
    Points
    1 220
    Par défaut bblien qui ne fonctionne pas
    bonjour.

    j'ai essayé de faire un lien avec l'expression suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $chaine=preg_replace('#\[url=(http://[[:alnum:]\-!\#$%&*+\\/.=?^_`{|}~;:]+\.[[:alnum:]]{1,63})\](.+)\[/url\]#iU','<a href="http://$1" target="blank">$2</a>',$message);//lien avec adresse non affichée
    malheureusement, ça ne marche pas et j'ignore pourquoi...
    si vous aviez une idée...

    merci
    Méphistophélès
    Si la solution ne résout pas votre problème, changez le problème...
    Cours et tutoriels C++ - FAQ C++ - Forum C++.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Août 2006
    Messages
    379
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 379
    Points : 422
    Points
    422
    Par défaut
    Bonsoir,

    Essaye cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $chaine = preg_replace("/(\[url=(.[^\"\'\(\)\<\>\]\[]*?)\])(.*?)(\[\/url\])/i", "<a href=\"\\2\">\\3</a>", $message);
    Bonne chance.

    [EDIT] : Il y a aussi le $chaine qui est différent du $message ... il faudrait peut-être choisir l'un ou l'autre non ? (Je n'ai pas le code sous les yeux donc je peux le penser :'))

  3. #3
    Membre éprouvé
    Avatar de méphistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Points : 1 220
    Points
    1 220
    Par défaut
    non, pour le $chaine, c'est normal.

    pour ton code, je l'ai un peu adapté pour qu'il vérifie la présence du http (je ne veut pas de ftp) et d'extention. il marche sans aucuns problème, mais j'aimerais savoir pourquoi le mien ne marche-t'il pas ?


    merci.
    Méphistophélès
    Si la solution ne résout pas votre problème, changez le problème...
    Cours et tutoriels C++ - FAQ C++ - Forum C++.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Août 2006
    Messages
    379
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 379
    Points : 422
    Points
    422
    Par défaut
    Je ne gère pas totalement ces expressions, mais ce qui m'a choqué c'est le #.

    Je n'en avais encore jamais vu .

    Peut-être que le problème vient de là.

    [EDIT] : Non en faite y'a une FAQ :p

  5. #5
    Membre éprouvé
    Avatar de méphistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Points : 1 220
    Points
    1 220
    Par défaut
    non, les délimiteurs sont au choix, et pour ma part je préfere les '#' car ils sont moins utilisés que les '/' (ça fait mois de '\' à taper)

    sinon, Théoriquement, mon code doit fonctionner comme ceci:bon, là, pas besoin d'xplications, c'est clair.
    [CODE]#\ je ne veut que des url commençant par http.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [[:alnum:]\-!\#$%&*+\\/.=?^_`{|}~;:]+
    bon, alors le premier crochet montre que c'est un choix. [:alnum:] désigne normalement 0-9a-zA-Z et les autres caractères à la suite sont cencé être les caractères autorisés (qui ne devraient pas avoir besoin de l'antislash si j'en crois le tutoriel du cyberzoïde). On ferme tout ça et + veut dire que j'en veut plusieurs.
    )je veut une extention (.html,.com,...) qui se termine par entre 3 et 63 caractères alpahanumériques.
    on ferme le crochet.
    entre
    et . on met dans $2
    on ferme le
    on finis la regex, i pour ne pas tenir compte de la casse, U pour éviter les super liens.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ,'<a href="http://$1" target="blank">$2</a>',$message);
    bon, la c'est tout simple, je ne te ferais pas l'insulte de l'expliquer.

    bref, si quelqu'un pouvais m'expliquer la cause de mon erreur...

    merci



    Edit: tiens, y'a un bug dans le code du forum: il tient compte du "[url] qui commence dans le code et continue apres.
    faudra le signaler.
    Méphistophélès
    Si la solution ne résout pas votre problème, changez le problème...
    Cours et tutoriels C++ - FAQ C++ - Forum C++.

  6. #6
    Membre habitué Avatar de daniel61
    Inscrit en
    Décembre 2006
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 139
    Points : 169
    Points
    169
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [[:alnum:]\-!\#$%&*+\\/.=?^_`{|}~;:]+
    le deuxième bloc dit qu'il n'y a qu'un seul et unique point dans une adresse http... l'expression sera toujours en échec sur une adresse http.

  7. #7
    Membre éprouvé
    Avatar de méphistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Points : 1 220
    Points
    1 220
    Par défaut
    non, ça veut dire un seul point avant l'extention puisque le point est autorisé dans l'expression précédente.
    Méphistophélès
    Si la solution ne résout pas votre problème, changez le problème...
    Cours et tutoriels C++ - FAQ C++ - Forum C++.

  8. #8
    Membre habitué Avatar de daniel61
    Inscrit en
    Décembre 2006
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 139
    Points : 169
    Points
    169
    Par défaut
    non, le premier point rencontré dans la chaine $message fera passer au second bloc "\.[[:alnum:]]{1,63}", aucun doute possible.

    il faudrait un ancrage ou valider chaque point possible ou important comme:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $chaine=preg_replace('#\[url=http://([[:alnum:]]+\.[[:alnum:]-]+\.[[:alnum:]]+(?:[[:alnum:]\-!\#$%&*+\\/.=?^_`{|}~;:]+))\](.+)\[/url\]#iU','<a href="http://$1" target="blank">$2</a>',$message);
    selon l'objectif.

  9. #9
    Membre éprouvé
    Avatar de méphistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Points : 1 220
    Points
    1 220
    Par défaut
    ha d'accord.
    je pensait qu'il ne cherchais que la forme.

    merci beaucoup.
    Méphistophélès
    Si la solution ne résout pas votre problème, changez le problème...
    Cours et tutoriels C++ - FAQ C++ - Forum C++.

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

Discussions similaires

  1. Code qui ne fonctionne pas sur Mac
    Par malbaladejo dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 14/01/2005, 11h08
  2. [SQL] Requête à jointure qui ne fonctionne pas
    Par Bensor dans le forum Langage SQL
    Réponses: 2
    Dernier message: 09/12/2004, 16h10
  3. Jointure externe qui ne fonctionne pas
    Par Guizz dans le forum Langage SQL
    Réponses: 3
    Dernier message: 05/02/2004, 12h26
  4. CREATEFILEMAPPING qui ne fonctionne pas???
    Par Jasmine dans le forum MFC
    Réponses: 2
    Dernier message: 06/01/2004, 19h33
  5. UNION qui ne fonctionne pas
    Par r-zo dans le forum Langage SQL
    Réponses: 7
    Dernier message: 21/07/2003, 10h04

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