2012-04-13 5 views
1

Ich möchte erkennen, ob ein URI in einer Zeichenfolge befindet, ordnungsgemäß bereinigen und es mit den richtigen Anker-Tags ausgeben.Ermitteln, ob ein URI innerhalb einer Zeichenfolge und Ausgabe Anker

dh eine Benutzereingaben:

Check out our profile on facebook! 
https://facebook.com/ourprofile 

and our twitter! 
twitter.com/#!/ourprofile 

and email us! 
[email protected] 

Gibt es eine Möglichkeit, um festzustellen, dass es URIs in der Zeichenfolge befindet, sanieren unsichere Zeichen und richtig Ausgang einen sicheren Anker?

so würde der Ausgang sein:

Check out our profile on facebook! 
<a href="https://www.facebook.com/ourprofile">https://www.facebook.com/ourprofile</a> 

and our twitter! 
<a href="http://www.twitter.com/#!/ourprofile">twitter.com/#!/ourprofile</a> 

and email us! 
<a href="mailto:[email protected]">[email protected]</a> 

die Ideen, die ich im Sinne hatte, wurden mit preg_match und einfachen preg_replace für unsichere Zeichen zu entfernen, aber das hat mich im Stich gelassen und im würde nur im Kreis, nicht mir wirklich wissen wo soll ich anfangen, da ich fast sicher bin, dass ein Blacklist-Ansatz nicht richtig oder sicher ist.

+1

Sieht aus wie Sie suchen http://stackoverflow.com/questions/1925455/how-to-mimic-stackoverflow-auto-link-behavior – MrCode

Antwort

3

Ich fand dies auf experts-exchange.com. Hoffnung, es hilft:

function make_links($text) 
{ 
    return preg_replace(
    array(
     '/(?(?=<a[^>]*>.+<\/a>) 
      (?:<a[^>]*>.+<\/a>) 
      | 
      ([^="\']?)((?:https?|ftp|bf2|):\/\/[^<> \n\r]+) 
     )/iex', 
     '/<a([^>]*)target="?[^"\']+"?/i', 
     '/<a([^>]+)>/i', 
     '/(^|\s)(www.[^<> \n\r]+)/iex', 
     '/(([_A-Za-z0-9-]+)(\\.[_A-Za-z0-9-]+)*@([A-Za-z0-9-]+) 
     (\\.[A-Za-z0-9-]+)*)/iex' 
     ), 
    array(
     "stripslashes((strlen('\\2')>0?'\\1<a href=\"\\2\">\\2</a>\\3':'\\0'))", 
     '<a\\1', 
     '<a\\1 target="_blank">', 
     "stripslashes((strlen('\\2')>0?'\\1<a href=\"http://\\2\">\\2</a>\\3':'\\0'))", 
     "stripslashes((strlen('\\2')>0?'<a href=\"mailto:\\0\">\\0</a>':'\\0'))" 
     ), 
     $text 
    ); 
} 
Verwandte Themen