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 :

Détecter une URL dans une textbox


Sujet :

Langage PHP

  1. #1
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 046
    Points
    34 046
    Billets dans le blog
    14
    Par défaut Détecter une URL dans une textbox
    Bonjour,

    Soit une textbox dans laquelle un utilisateur peut saisir du texte contenant une URL.
    Comme je dois enregistrer le contenu de la textbox puis l'afficher ultérieurement, je cherche une fonction ou un outil qui permettrait de détecter l'URL afin qu'à l'affichage le style et le tag <a> lui soit appliqué.

    Une piste à me donner ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  2. #2
    Membre émérite
    Avatar de gene69
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 769
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 769
    Points : 2 446
    Points
    2 446
    Par défaut
    en php: filter_var + constante FILTER_VALIDATE_URL
    PHP fait nativement la validation d'adresse électronique .
    Celui qui a inventé mysql_connect(...) or die() est déjà mort plusieurs fois.

    Utilisez le bouton résolu!

  3. #3
    Membre confirmé
    Développeur Web
    Inscrit en
    Avril 2005
    Messages
    397
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2005
    Messages : 397
    Points : 518
    Points
    518
    Par défaut
    Il faut que tu commences par déterminer le masque des URL que tu voudrais détecter.

    exemple de possibilité :
    www.example.com
    http://www.example.com
    https://example.com

    et que tu utilises une expression régulière.
    tel que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    preg_match_all('`(https?://|wwww)[^\ ]+`', $subject, $matches)
    Sachant que ce masque est très basique il suppose qu'on ne colle aucun caractère après l'url.
    Zend PHP5 Certification
    MySQL 4 Core Certification

  4. #4
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 046
    Points
    34 046
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par gene69 Voir le message
    en php: filter_var + constante FILTER_VALIDATE_URL
    Merci pour l'indication mais ce filtre ne donne un bon résultat que si c'est une URL pure.
    "http://example.com" => OK
    "http://example.com/sous-url => OK
    "texte http://example.com" => KO
    "http://example.com texte" => KO

    Citation Envoyé par Gats Voir le message
    Il faut que tu commences par déterminer le masque des URL que tu voudrais détecter.

    exemple de possibilité :
    www.example.com
    http://www.example.com
    https://example.com

    et que tu utilises une expression régulière.
    tel que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    preg_match_all('`(https?://|wwww)[^\ ]+`', $subject, $matches)
    Sachant que ce masque est très basique il suppose qu'on ne colle aucun caractère après l'url.
    Je pense effectivement que ça peut mieux fonctionner. Merci pour l'expression régulière car ce n'est pas mon fort. JE vais essayer de la compléter pour ce qui suit l'URL.

    EDIT :
    Apparemment ça fonctionne sans avoir besoin de changer l'expreg :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $subject = 'aaa http://example.com/sous-url aaa';
    var_dump(preg_match_all('`(https?://|wwww)[^\ ]+`', $subject, $matches));
    => 1

    Il me sreste quand même à trouver comment isoler la partie url du texte pour la mettre en forme, c'est à dire notamment l'entourer de la balise <a>.

    Une idée à me soumettre ?

    EDIT 2 :
    En fait j'aurais dû lire la doc !
    Avec un var-dump($matches) je trouve ce que je veux. Je pense que je vais arriver à mes fins avec ça.

    Merci encore.

    EDIT 3 :
    Il y a quand même un petit souci qui est peut-être dû à l'expreg :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $subject = 'aaa http://example.com aaa';
    preg_match_all('`(https?://|wwww)[^\ ]+`', $subject, $matches);
    var_dump($matches);
    Résultat :
    array(2) { [0]=> array(1) { [0]=> string(18) "http://example.com" } [1]=> array(1) { [0]=> string(7) "http://" } }
    Pourquoi il me renvoie 2 éléments : l'url complète puis seulement http:// ?

    EDIT 4 :
    C'est bon, j'y suis arrivé grâce à une discussion d'un autre forum. Merci

    Voici le code final :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    	$pattern = '`(https?://|www)([a-zA-Z0-9\/.]+)`';
    	$replacement = "<a href='\\1\\2' class='urldansmsg' >\\1\\2</a>";
     
    	echo preg_replace($pattern, $replacement, $info['message']);
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  5. #5
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 046
    Points
    34 046
    Billets dans le blog
    14
    Par défaut
    Encore un petit problème !

    mon preg_replace met l'url trouvée dans le texte dans le href de la balise <a> et entre <a> et </a>.
    Du coup, lorsque l'url trouvée dans le texte ne commence pas par http, l'url du href est relative à la page donc au site.

    Exemple...
    Texte d'origine :
    Un jeu à découvrir : www.ngswing.com
    Résultat :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    Un jeu à découvrir : <a class="urldansmsg" href="www.ngswing.com">www.ngswing.com</a>

    Si je suis sur la page http://www.monsite.com/mapage.html et que je clique sur le lien, ça tente en fait d'ouvrir ce lien http://www.monsite.com/www.ngswing.com qui bien entendu n'existe pas.

    La question est donc : comment forcerl'ajout de http:// lorsque le lien trouvé commence par www ?

    EDIT :
    J'ai trouvé une solution avec un second preg_replace.
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    	$pattern = '`(https?://|www)([a-zA-Z0-9\/.]+)`';
    	$replacement = "<a href='\\1\\2' class='urldansmsg' >\\1\\2</a>";
     
    	$texte = preg_replace($pattern, $replacement, $info['message']); 
     
    	$pattern = "`href='www`";
    	$replacement = "href='http://www";
    	echo preg_replace($pattern, $replacement, $texte);

    Si vous avez mieux, je suis preneur.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

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

Discussions similaires

  1. [XL-2007] Afficher une checkbox dans une feuille si une checkbox d'une autre feuille est cochée
    Par JessieCoutas dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 18/08/2009, 13h35
  2. portée d'une variable dans une fonction dans une méthode
    Par laurentg2003 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 29/06/2009, 19h05
  3. [POO] dans une classe, appeler une fonction dans une méthode
    Par arnaudperfect dans le forum Langage
    Réponses: 3
    Dernier message: 26/08/2007, 23h04
  4. Envoyer une formulaire dans une page dans une Frame
    Par zooffy dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 29/06/2007, 10h13
  5. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 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