1. ✅ Apprenez une METHODE qui marche pour votre SEO ! Formation à distance avec Olivier Duffez et Fabien Facériès + aide pour prise en charge du financement
    Rejeter la notice

Regex pour transformer les URL en lien cliquable

Discussion dans 'URL Rewriting et .htaccess' créé par vitalizo, 12 Octobre 2010.

  1. vitalizo
    vitalizo WRInaute impliqué
    Inscrit:
    27 Novembre 2005
    Messages:
    962
    J'aime reçus:
    0
    Bonjour,

    tout est dans le titre,

    j'ai pour l'instant un:
    Code:
    $message= preg_replace('!http://[a-z0-9._/-]+!i', '<a href="$0" target="_blank" rel="nofollow">$0</a>', $message);

    Ca fonctionne sauf pour les URLS qui contiennent des %20.

    J'ai cherché sur mon super pote gg mais tout ce que je trouve emploie des eregi_replace qui est maintenant déconseillé.

    QQun aurait ça sous la main ?

    Merci
     
  2. vitalizo
    vitalizo WRInaute impliqué
    Inscrit:
    27 Novembre 2005
    Messages:
    962
    J'aime reçus:
    0
    J'up avec du nouveau,

    donc maintenant j'ai trouvé et compris ceci (ca réduit aussi les URL)
    Code:
    $callback_function = create_function( 
                            '$matches', 
                            '$link_displayed = (strlen($matches[0]) > 25) ? substr( $matches[0], 0, 40).\'[&hellip;]\'.substr($matches[0], -10) : $matches[0]; 
                             return \'<a href="\'.$matches[0].\'" title="\'.$matches[0].\'" target="_blank" rel="nofollow">\'.$link_displayed.\'</a>\';' 
                            ); 
                $message = preg_replace_callback($pattern, $callback_function, $message);
    Mais la même, en local, ca fonctionne impec.
    Online, ca me termine toutes mes urls / >.
    Exemple: https://www.google.fr
    />

    kesako ?

    C'est incompatible ces deux fonctions?
     
  3. idefix
    idefix WRInaute occasionnel
    Inscrit:
    17 Janvier 2007
    Messages:
    251
    J'aime reçus:
    0
    Pourquoi est-ce que le premier code ne marche pas?
    Question bête, tu as bien essayé d'ajouté % dans la regex?
     
  4. vitalizo
    vitalizo WRInaute impliqué
    Inscrit:
    27 Novembre 2005
    Messages:
    962
    J'aime reçus:
    0
    Salut,

    je reprends en détaillant un max du début (oubliez mes premiers posts) pour être le plus clair possible

    Donc ma page de traitement:
    Code:
    $message = stripslashes(nl2br($donnees2['message'])); // je récup la données.
    
    // je rends les url cliquable:
     $pattern = '`((?:https?|ftp)://\S+?)(?=[[:punct:]]?(?:\s|\Z)|\Z)`';
             $callback_function = create_function( 
                            '$matches', 
                            '$link_displayed = (strlen($matches[0]) > 25) ? substr( $matches[0], 0, 40).\'[&hellip;]\'.substr($matches[0], -10) : $matches[0]; 
                             return \'<a href="\'.$matches[0].\'" title="\'.$matches[0].\'" target="_blank" rel="nofollow">\'.$link_displayed.\'</a>\';' 
                            ); 
             $message = preg_replace_callback($pattern, $callback_function, $message);
    Soit
    $message1='http://www.example.com';
    $message2='ceci est un exemple http://www.example.com, et ça une url';
    Le problème:
    Si je laisse le code tel quel, quand je fais echo de $message2, ca donne:
    ceci est un exemple http://www.example.com, et ça une url /> (notez le /> en fin de phrase).

    Sur $message1 je n'ai pas ce />

    J'ai trouvé le coupable. Si j'enlève la fonction nl2br à $message, je n'ai plus de />. Mais, le saut de ligne ne s'effectue plus.
     
  5. vitalizo
    vitalizo WRInaute impliqué
    Inscrit:
    27 Novembre 2005
    Messages:
    962
    J'aime reçus:
    0
    C'est bon, j'ai réglé le problème. Il venait bien du nl2br.

    Dans le futur, si y'en a qui ont le même soucis. Il suffit de supprimer le nl2br et de prendre une fonction.
    J'ai utilisé
    Code:
    function mynl2br($text) { 
       return strtr($text, array("\r\n" => '<br />', "\r" => '<br />', "\n" => '<br />')); 
    } 
    Que l'on retrouve ici
    http://php.net/manual/fr/function.nl2br.php
     
  6. manman
    manman WRInaute discret
    Inscrit:
    24 Novembre 2008
    Messages:
    148
    J'aime reçus:
    0
    Bonjour, voila un code qui marche:

    <?

    $mensagem = eregi_replace("((([ftp://])|(http(s?)://))(:)alnum:



    |[-\%\.\?\=\#\_\:\&\/\~\+\@\,\;])*))","<a href = '\\0' target='_blank'>\\0</a>",$mensagem);


    $mensagem = eregi_replace("(([^/])www\.|(^www\.))(:)alnum:|[-\%\.\?\=\#\_\:\&\/\~\+\@\,\;])*)","\\2<a href =



    'http://www.\\4' target='_blank'>www.\\4</a>",$mensagem);

    ?>

    Source: http://www.coursplus.net/cours-2-18-239-transformer-une-url-en-lien-hy ... ble-en-php
     
  7. spout
    spout WRInaute accro
    Inscrit:
    14 Mai 2003
    Messages:
    9 057
    J'aime reçus:
    294
    ereg* est déprécié depuis qu'on a marché sur la lune.
     
Chargement...
Similar Threads - Regex transformer lien Forum Date
Expression régulière MySql REGEXP pour transformer des liens Développement d'un site Web ou d'une appli mobile 26 Septembre 2011
URL rewriting et REGEX bonnes pratiques Développement d'un site Web ou d'une appli mobile 9 Septembre 2020
RegExp du Rewrite URL Rewriting et .htaccess 19 Décembre 2019
Ne prendre qu'une partie d'un QueryString dans une regex RewriteCond URL Rewriting et .htaccess 9 Décembre 2019
RegEx dans .htaccess Débuter en référencement 26 Mars 2019
Redirections de pages avec suppression d'un élément dans l'URL [RegEX] Débuter en référencement 21 Novembre 2017
Regex htaccess Administration d'un site Web 20 Novembre 2016
Exclure domaine de Spam avec RegEx Google Analytics 10 Avril 2015
Sélectionner une partie d'URL avec une RegEx Google Analytics 9 Juillet 2014
[PHP] Regex Complexe Développement d'un site Web ou d'une appli mobile 29 Octobre 2013