Forum

Ask for help to thousands of professionals from different fields
This question has been marked as solved
Question
author_picture
| Etudiant en Génie Logiciel
| Cameroon
Standard Level
10 Points

Comment transformer une URL texte en lien hypertexte?

Bonjour, j'ai un petit soucis. Sur mon petit site web d'apprentissage que j'ai developpé en PHP les utilisateurs peuvent commenter sur les articles, mais le problème c'est que quand un utilisateur ajoute un lien à  son commentaire, on ne peut pas directement cliquer dessus pour aller sur la page du lien. Sur plusieurs sites lorsqu'un utilisateur ajoute un lien à  son commentaire, le lien se transforme en lien hypertexte après affichage du commentaire. J'aimerais donc savoir comment implementer ça SVP. Merci d'avance.

HTMLPHP
7.12.2017 10:09
Best Answer
author_picture
| Etudiant
| Germany
Junior Level
60 Points

 D'après moi l'utilisation des regex est très pratique pour régler de pareilles situations. La solution de @Gneto fonctionnerait mais avec trop de codes et de complications. Pour faire simple, je ferais tout simplement ceci ( puisque tu utilises du PHP):

// Ci dessous une regex pour une url
$url = '@(http)?(s)?(://)?(([a-zA-Z])([-\w]+\.)+([^\s\.]+[^\s]*)+[^,.\s])@';

// Ci dessous la fonction preg_replace() de PHP qui va remplacer toutes parties
// du commentaire ( que j'appelle ici $commentaireSansURL ) qui ressembleront 
// à la regex ci dessus par le lien URL
$commentaireAvecURL = preg_replace($url, '<a href="http$2://$4">$0</a>', $commentaireSansURL);

// Affiche ton commentaire ici avec les URLs
echo $commentaireAvecURL;

Plus court et plus simple. Sinon tu dois aussi apprendre à utiliser les regex, c'est vraiment très pratique.

You have already upvoted this answer !!! You have already downvoted this answer !!! You can not vote your own answer
author_picture
| Etudiant
| Germany
Junior Level
60 Points

Grâce aux regex ( Expressions régulières )  tu peux détecter une url dans un commentaire. Ensuite remplacer le texte detecté par la balise <a href="url">texte</a> du HTML. 

Juste pour te donner un peu une idée de la chose. Mais si tu n'y arrives toujours pas, je peux te faire un petit exemple.

You have already upvoted this answer !!! You have already downvoted this answer !!! You can not vote your own answer
author_picture
| Software developer
| Cote D'Ivoire
Standard Level
20 Points

Bonsoir je te propose ce script.Bref j' ai simplifie beaucoup de facteur pour rendre cela simple mais je te rassure en cas de satisfaction je peux reecrire un autre encore plus robuste et avancé que celui-ci .Pour  faire cela j' ai utiliser Javascript et  le framwork Jquery .php n' est pas trop approprié pour faire cette tache.

<html>
<head>
    <script src="../../jquerylib/jquery-3.2.0.js"></script>
    <script>
           ///  ####JQUERY JQUERY  #########/
        $(document).ready(function(){
            // quand tu click sur send 
            $("#send").click(function(){
                // enregistre le text ecris 
                var text = $("#textarea").val(); 
                //enregistre le nouveau text 
                var returnText = linkVerify(text);
                //affiche le text avec  lien
                $("#comment").html(returnText);
               
            });
        });
        
        
        // cherche mot commencant par http.....
        function linkVerify(text)
        {
            var newtext ="";
            var splitext= text.split(" ");
            var searcher = /http.+/;
            for(var i=0; i< splitext.length ;i++)
            {
                var tempText = splitext[i] ; 
                if( tempText.search(searcher)  !=-1 ) // donc le mot commence par http
                {
                    newtext += linkWrapper(tempText) ; // habillage du mot en lien avec la focntion linkWrapper 
                }
                else  // c' est pas un mot commencans par http 
                {
                    newtext += " " +tempText  +" ";  // 
                }
               
            }
             return newtext;  // retourne tout le text 
        }
        
        // habillage en link
        function linkWrapper(link)
        {
            return links = " <a href='"+link+"' target='_blank'>"+link+" </a>";
        }
    </script>
</head>
    <body>
        <!-- ecris ici ce que tu veux -->
        <textarea cols="50" rows="20" name='textarea' id='textarea'>
        
        </textarea>
        <button id='send'>send</button>
        <!-- Ici ton lien apparait plus ce que tu ecris -->
        <p id="comment"> </p>
    </body>
</html>

J' espere qui il te met sur la voie.N' oubli pas de me communiquer de potentiels erreurs .

You have already upvoted this answer !!! You have already downvoted this answer !!! You can not vote your own answer
author_picture
| Etudiant en Génie Logiciel
| Cameroon
Standard Level
10 Points

Merci pour votre aide à vous deux.

@Salvador Je n'ai jamais bosser avec les expressions régulières (Regex), du coup pour implementer ta proposition sera vraiment difficile pour moi. Peux tu me faire un exemple de code?

@GNIETO Merci pour ton script. Le problème c'est que actuellement certains commentaires sont déjà stockés dans ma base de données et du coup je ne peux les modifier qu'à l'affichage. Donc je pense qu'utiliser du javascript pour ça ne sera pas très convenable.

You have already upvoted this answer !!! You have already downvoted this answer !!! You can not vote your own answer
author_picture
| Software developer
| Cote D'Ivoire
Standard Level
20 Points

@Christian Djomo Dans ce cas tu fait sortir le commentaire avec soit php par example par le biais de Ajax (HttpRequest ).Ajax te permet de faire du request au serveur sans rafraichir la page web et ramene une reponse le plus souvent ce sont des données que tu as demandé au serveur .Ainsi Javascript  utilisera ces données  pour les afficher,  avec les critere que tu aura definis.Connais-tu AJAX?

You have already upvoted this answer !!! You have already downvoted this answer !!! You can not vote your own answer
author_picture
| Software developer
| Cote D'Ivoire
Standard Level
20 Points

@Salvador Pouantou , Oui je suis daccord avec ton script , il est plus simple et rapide a implementer.

You have already upvoted this answer !!! You have already downvoted this answer !!! You can not vote your own answer
author_picture
| Etudiant en Génie Logiciel
| Cameroon
Standard Level
10 Points

Merci @Salvador. Ta solution est simple et ça marche malgré que je ne comprends rien sur les regex comme sur cette ligne:

$url = '@(http)?(s)?(://)?(([a-zA-Z])([-\w]+\.)+([^\s\.]+[^\s]*)+[^,.\s])@';

Mais bon, je vais essayer de lire des petits tutos dessus. C'est vraiment pratique. Merci encore.

ok, Je valide ta réponse comme meilleure. 

You have already upvoted this answer !!! You have already downvoted this answer !!! You can not vote your own answer
× You are not logged in. Please login or sign up for free to answer this post.

Your Answer

×

You gain:

  • +15 points when your answer is marked as accepted
  • +5 points when your answer is voted up

You lose:

  • -2 points when your answer is voted down
forum_icon Related Topics