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

Contribuez .NET Discussion :

C# : Transformer une url contenu dans un texte brut en sa forme <a href>


Sujet :

Contribuez .NET

  1. #1
    Membre régulier Avatar de Othana
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2007
    Messages
    188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 188
    Points : 86
    Points
    86
    Par défaut C# : Transformer une url contenu dans un texte brut en sa forme <a href>
    Pour ceux qui souhaiteraient intégrer un texte dans une page html et transformer les éventuelles url contenues dans ce texte en url directement cliquable, sous leur forme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href="monurl">monurl</a>
    voici une méthode qui valide toute forme d'url possible :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
            public static string UrlReformate(string rawtext)
            {
                string re1 = "((?:http|https|ftp)(?::\\/{2}[\\w]+)(?:[\\/|\\.]?)(?:[^\\s\"]*))";
                Regex r = new Regex(re1, RegexOptions.IgnoreCase | RegexOptions.Singleline);
                //MatchEvaluator match;
                string result = r.Replace(rawtext, delegate(Match m)
                {
                    return "<a href='" + m.Value + "'>" + m.Value + "</a>";
                    //return System.Web.HttpUtility.HtmlEncode(m.Value); //ne donne pas le résultat escompté, l'url reste une chaine brute non cliquable
                });
                return result;
            }

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Il me semble qu'on pourrait simplifier...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public static string UrlReformate(string rawtext)
    {
        return Regex.Replace(
            rawText,
            "((?:http|https|ftp)(?::\\/{2}[\\w]+)(?:[\\/|\\.]?)(?:[^\\s\"]*))",
            "<a href=\"$0\">$0</a>",
            RegexOptions.IgnoreCase | RegexOptions.Singleline);
    }

    Au passage j'ai remplacé les apostrophes par des guillemets... les apostrophes pour les valeurs d'attribut ne sont pas valides en XHTML, ni en HTML 5 il me semble.

  3. #3
    Membre régulier Avatar de Othana
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2007
    Messages
    188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 188
    Points : 86
    Points
    86
    Par défaut
    Merci pour la simplification. pour les guillemets, c'était une question d'échappement.

  4. #4
    Membre habitué
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2013
    Messages : 76
    Points : 143
    Points
    143
    Par défaut
    Faut pas qu'il y ai déjà des liens correctement former dans le texte non plus (sinon vive le bordel)

    @tomlev, il me semble que la règle c'est "tout document (x)HTML valide est un document html 5 valide".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <!DOCTYPE html>
    <title>test</title>
    <section>
    <h1 class=c1>Mon Titre</h1> 
    </section>
    c'est du html5 valide (3 warning à la validation)

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par g.Arnaud Voir le message
    @tomlev, il me semble que la règle c'est "tout document (x)HTML valide est un document html 5 valide".
    La règle à laquelle je pensais, c'est plutôt qu'un document XHTML valide doit être un document XML valide, et il me semblait qu'en XML on devait forcément utiliser des guillemets et non des apostrophes... mais apparemment j'avais tort.

  6. #6
    Membre habitué
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2013
    Messages : 76
    Points : 143
    Points
    143
    Par défaut
    Citation Envoyé par tomlev Voir le message
    La règle à laquelle je pensais, c'est plutôt qu'un document XHTML valide doit être un document XML valide, et il me semblait qu'en XML on devait forcément utiliser des guillemets et non des apostrophes... mais apparemment j'avais tort.
    là précision était sur "ni en html 5 il me semble"

    Après oui, un xhtml pour être valide doit être un xml valide.
    Et en effet en XML, c'est les guillements pour délimiter les attributs.

    Et logiquement, on devrait aussi mettre le prologue xml pour les documents xhtml. Mais le mettre pose des problème avec certains navigateurs.

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par g.Arnaud Voir le message
    Et en effet en XML, c'est les guillements pour délimiter les attributs.
    Bah c'est ce que je croyais, mais en fait les apostrophes sont valides aussi

  8. #8
    Membre habitué
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2013
    Messages : 76
    Points : 143
    Points
    143
    Par défaut
    Il semblerait que j'ai assimilé une convention comme étant une règle strict de XML

    ça me rassure, je suis pas le seul

    Sinon, au niveau de la fonction, avec une petite modification, elle pourrait être un poils plus universelle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public static string UrlReformate(string rawtext)
    {
        string re1 = @"((?:[\w]{3,5})(?::\/{2}[\w]+)((:[\w])?@[\w])?(?:[\/|\.]?)(?:[^\s""]*))";
        Regex r = new Regex(re1, RegexOptions.IgnoreCase | RegexOptions.Singleline);
        //MatchEvaluator match;
        string result = r.Replace(rawtext, delegate(Match m)
        {
            return "<a href='" + m.Value + "'>" + m.Value + "</a>";
            //return System.Web.HttpUtility.HtmlEncode(m.Value); //ne donne pas le résultat escompté, l'url reste une chaine brute non cliquable
        });
        return result;
    }
    elle prendrait en compte les liens de cette forme

    ftp://utilisateur@serveur_ftp/chemin_url (ftp avec login et mot de psse dans l'url)
    irc://serveur/channel (irc)
    tmup://serveur/ressource (trackmania)

    Sans tenir compte du protocole ou s'il y a les identifiant dans l'url.

    j'ai définit le protocole comme étant entre 3 et 5 lettres

  9. #9
    Membre régulier Avatar de Othana
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2007
    Messages
    188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 188
    Points : 86
    Points
    86
    Par défaut
    Citation Envoyé par g.Arnaud Voir le message
    Sinon, au niveau de la fonction, avec une petite modification, elle pourrait être un poils plus universelle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public static string UrlReformate(string rawtext)
    {
        string re1 = @"((?:[\w]{3,5})(?::\/{2}[\w]+)((:[\w])?@[\w])?(?:[\/|\.]?)(?:[^\s""]*))";
        Regex r = new Regex(re1, RegexOptions.IgnoreCase | RegexOptions.Singleline);
        //MatchEvaluator match;
        string result = r.Replace(rawtext, delegate(Match m)
        {
            return "<a href='" + m.Value + "'>" + m.Value + "</a>";
            //return System.Web.HttpUtility.HtmlEncode(m.Value); //ne donne pas le résultat escompté, l'url reste une chaine brute non cliquable
        });
        return result;
    }
    elle prendrait en compte les liens de cette forme

    ftp://utilisateur@serveur_ftp/chemin_url (ftp avec login et mot de psse dans l'url)
    irc://serveur/channel (irc)
    tmup://serveur/ressource (trackmania)

    Sans tenir compte du protocole ou s'il y a les identifiant dans l'url.

    j'ai définit le protocole comme étant entre 3 et 5 lettres
    Ah ouai, pas mal celle-là. Dans le contexte d'utilisations de cette fonction, je n'aurais jamais besoin d'url avec login. Mais bon, sait-on jamais ?
    Merci à tous en tout cas. J'ai un programme fonctionnel maintenant

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

Discussions similaires

  1. lancer un url contenu dans une base de données mysql
    Par megara2 dans le forum NetBeans
    Réponses: 1
    Dernier message: 04/09/2009, 15h39
  2. calculer une opération contenue dans un texte
    Par Palo2009 dans le forum Forms
    Réponses: 6
    Dernier message: 17/02/2009, 16h55
  3. Interpréter une variable contenue dans un fichier texte
    Par frederic_s dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 11/10/2007, 14h06
  4. Effacer une chaine contenue dans une zone text
    Par johnnywalker dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 13/04/2007, 12h52
  5. [JAR] instancier une Image contenue dans un jar
    Par celine31 dans le forum Général Java
    Réponses: 3
    Dernier message: 03/04/2005, 15h55

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