2010-11-18 12 views
9

Ich habe eine Funktion, die das <a href> Tag vor einem Link und </a> nach dem Link hinzufügen. Es bricht jedoch für einige Webseiten. Wie würdest du diese Funktion verbessern? Vielen Dank!PHP - Hinzufügen von Link zu einer URL in einer Zeichenfolge

function processString($s) 
{ 
    // check if there is a link 

    if(preg_match("/http:\/\//",$s)) 
    { 
     print preg_match("/http:\/\//",$s); 


     $startUrl = stripos($s,"http://"); 

     // if the link is in between text 
     if(stripos($s," ",$startUrl)){ 
      $endUrl = stripos($s," ",$startUrl); 
     } 
     // if link is at the end of string 
     else {$endUrl = strlen($s);} 

     $beforeUrl = substr($s,0,$startUrl); 
     $url = substr($s,$startUrl,$endUrl-$startUrl); 
     $afterUrl = substr($s,$endUrl); 

     $newString = $beforeUrl."<a href=\"$url\">".$url."</a>".$afterUrl; 

     return $newString; 
    } 

    return $s; 
} 
+0

Die Regex ein wenig schlampig, aber 99% meiner Eingabe wird korrekt URLs haben, wenn jeder – AlexBrand

+4

Welche Webseiten für nicht brechen? –

+0

Am Anfang testet man auch https, aber später lässt man das "s" weg. Weiß nicht, ob das zu diesem Fehler führt, weil ich auch nicht weiß, welche Seiten kaputt sind;) – KingCrunch

Antwort

18
function processString($s) { 
    return preg_replace('/https?:\/\/[\w\-\.!~#?&=+\*\'"(),\/]+/','<a href="$0">$0</a>',$s); 
} 
+0

Ich glaube, ein "=" fehlt: Es schlägt fehl, wenn die URL get Parameter enthält. Ich habe es einfach nach dem "&" hinzugefügt und jetzt funktioniert es: 'preg_replace ('/ https?: \/\/[\ W \ - \.! ~? & = + \ * \'"(), \ /] +/',' $0 ', $ s) ' – Narcolessico

+4

Sie haben Adressen mit # innerhalb vergessen - also ist die korrekte Version' preg_replace ('/https?: \/\/[\ W \ - \.! ~ # ? & = + \ * \ '"(), \ /] + /', '$0', $ text)' –

+0

Ich habe gerade die Antwort bearbeitet, um diese beiden Zusätze wiederzugeben. –

1

Es für alle URLs bricht die "besondere" HTML-Zeichen enthalten. Um sicherzugehen, übergeben Sie die drei String-Komponenten über htmlspecialchars(), bevor Sie sie miteinander verketten (es sei denn, Sie möchten HTML außerhalb der URL zulassen).

1
function processString($s){ 
    return preg_replace('@((https?://)?([-\w]+\.[-\w\.]+)+\w(:\d+)?(/([-\w/_\.]*(\?\S+)?)?)*)@', '<a href="$1">$1</a>', $s); 
} 

es gefunden here

+0

schlägt hier fehl: ' http://www.xyz.com/~this-does-not-work! ' – stillstanding

+0

passt" a ... a "- seltsam – AlexBrand

+0

Das gleiche Szenario, ich brauche es in Jquery/Javascript. Kann jemand helfen? – Yuv

Verwandte Themen