WN

WN (https://www.wn.se/forum/index.php)
-   Klientsidans teknologier, design och grafik (https://www.wn.se/forum/forumdisplay.php?f=12)
-   -   Göra länk klickbar (https://www.wn.se/forum/showthread.php?t=9020)

aikon 2005-07-23 11:17

Någon skriver i ett forum in en länk (med http:// eller www så man kan identifiera den som en länk). Jag vill göra denna klickbar, alltså lägga till länk.

Hur gör jag den omvandlingen smartast i php?

Användaren tillåts själv inte att använda html i sin text.

EDIT: borde väl legat under serversidans..

koala 2005-07-23 12:12

Kod:

<?php
function email2link($string)
{
    return preg_replace("!(^|[ \n\r\t])([a-z_-][a-z0-9\._-]*@[a-z0-9_-]+(\.[a-z0-9_-]+)+)!i","\\1<a href=\"mailto:\\2\">\\2</a>",$string);
}


function url2link ( $Text )
{
       
        $Text = email2link($Text);
       
// First match things beginning with http:// (or other protocols)
  $NotAnchor = '(?<!"|href=|href\s=\s|href=\s|href\s=)';
  $Protocol = '(http|ftp|https):\/\/';
  $Domain = '[\w]+(.[\w]+)';
  $Subdir = '([\w\-\.,@?^=%&:\/~\+#]*[\w\-\@?^=%&\/~\+#])?';
  $Expr = '/' . $NotAnchor . $Protocol . $Domain . $Subdir . '/i';

  $Result = preg_replace( $Expr, "<a href=\"$0\" title=\"$0\" target=\"_blank\">$0</a>", $Text );

// Now match things beginning with www.
  $NotAnchor = '(?<!"|href=|href\s=\s|href=\s|href\s=)';
  $NotHTTP = '(?<!:\/\/)';
  $Domain = 'www(.[\w]+)';
  $Subdir = '([\w\-\.,@?^=%&:\/~\+#]*[\w\-\@?^=%&\/~\+#])?';
  $Expr = '/' . $NotAnchor . $NotHTTP . $Domain . $Subdir . '/i';

  return preg_replace( $Expr, "<a href=\"http://$0\" title=\"http://$0\" target=\"_blank\">$0</a>", $Result );
}


echo url2link("Det här är en adress@domän.com, och det här en länk://till.nagonting.com/hej.html?id=12");
?>

Ovanstående kan nog hjälpa dig.

jimmie 2005-07-23 12:22

Jag skulle använda preg_replace

http://www.php.net/Preg_replace

Nu har jag inte testat detta men prova det här:

$text = preg_replace("/(http:\/\/[^\s]*)/","<a href=\"\\1\">\\1</a>",$text);

Hoppas det hjälper

Edit:

Om du vill ha för bara www också får du göra om lite, kanske såhär(obs har inte testat)

$text = preg_replace("/(http:\/\/www|http:\/\/|www)([^\s]*)/","<a href=\"http://www\\2\">\\1\\2</a>",$text);

aikon 2005-07-23 12:46

Tack koala och jimmie! Detta kommer hjälpa mig mycket. :)

Filip 2005-07-23 15:35

Finns även lite lösningar på:
http://regexlib.com/DisplayPatterns.aspx?c...=1&categoryId=2


Alla tider är GMT +2. Klockan är nu 21:35.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson