Soutenez-nous
Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 9 sur 9
  1. #1
    Membre du Club Avatar de Torq le nain
    Homme Profil pro
    Crise de nerf !
    Inscrit en
    mars 2007
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Crise de nerf !
    Secteur : Finance

    Informations forums :
    Inscription : mars 2007
    Messages : 174
    Points : 67
    Points
    67

    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 :
    <a href="monurl">monurl</a>
    voici une méthode qui valide toute forme d'url possible :
    Code :
    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 Thomas Levesque
    Développeur .NET
    Inscrit en
    février 2004
    Messages
    19 071
    Détails du profil
    Informations personnelles :
    Nom : Homme Thomas Levesque
    Âge : 32
    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 071
    Points : 36 282
    Points
    36 282

    Par défaut

    Il me semble qu'on pourrait simplifier...

    Code :
    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 du Club Avatar de Torq le nain
    Homme Profil pro
    Crise de nerf !
    Inscrit en
    mars 2007
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Crise de nerf !
    Secteur : Finance

    Informations forums :
    Inscription : mars 2007
    Messages : 174
    Points : 67
    Points
    67

    Par défaut

    Merci pour la simplification. pour les guillemets, c'était une question d'échappement.

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

    Informations forums :
    Inscription : avril 2013
    Messages : 76
    Points : 124
    Points
    124

    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 :
    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 Thomas Levesque
    Développeur .NET
    Inscrit en
    février 2004
    Messages
    19 071
    Détails du profil
    Informations personnelles :
    Nom : Homme Thomas Levesque
    Âge : 32
    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 071
    Points : 36 282
    Points
    36 282

    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 Arnaud
    Inscrit en
    avril 2013
    Messages
    76
    Détails du profil
    Informations personnelles :
    Nom : Homme Arnaud
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : avril 2013
    Messages : 76
    Points : 124
    Points
    124

    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 Thomas Levesque
    Développeur .NET
    Inscrit en
    février 2004
    Messages
    19 071
    Détails du profil
    Informations personnelles :
    Nom : Homme Thomas Levesque
    Âge : 32
    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 071
    Points : 36 282
    Points
    36 282

    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 Arnaud
    Inscrit en
    avril 2013
    Messages
    76
    Détails du profil
    Informations personnelles :
    Nom : Homme Arnaud
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : avril 2013
    Messages : 76
    Points : 124
    Points
    124

    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 :
    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 du Club Avatar de Torq le nain
    Homme Profil pro
    Crise de nerf !
    Inscrit en
    mars 2007
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Crise de nerf !
    Secteur : Finance

    Informations forums :
    Inscription : mars 2007
    Messages : 174
    Points : 67
    Points
    67

    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 :
    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.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •