PHP - Hinzufügen einer Verknüpfung zu einer URL in einen string
Habe ich eine Funktion hinzufügen wird die <a href>
- tag vor dem link und </a>
nach dem link. Aber es bricht für einige Webseiten. Wie würden Sie verbessern mit dieser Funktion? Danke!
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;
}
- Die regex ist ein wenig schlampig, aber 99% meiner Eingaben korrekte URLs wenn überhaupt
- Welche Webseiten hat er Pause?
- Am Anfang, testen Sie gegen https auch, aber später den Zusatz "s". Weiß nicht, wenn dies zu diesem Fehler führen, da ich auch nicht weiß, welche Seiten sind gebrochen 😉
- Tut mir Leid, ich entfernte die [s] aus dem regex. Wie könnte ich die Funktionen für Zeichenketten wie "www.google.com" oder "https:www.example.com" ?
- "www.google.com" ist schwieriger zu analysieren. Sie brauchen ein langes regex nur für alle TLDs.
Du musst angemeldet sein, um einen Kommentar abzugeben.
preg_replace('/https?:\/\/[\w\-\.!~?&=+\*\'"(),\/]+/','<a href="$0">$0</a>',$s)
preg_replace('/https?:\/\/[\w\-\.!~#?&=+\*\'"(),\/]+/','<a href="$0">$0</a>',$text)
Bricht es für alle URLs, die "Besondere" HTML-Zeichen. Um sicher zu sein, übergeben Sie die drei string-Komponenten durch htmlspecialchars() vor der Verkettung zusammen (es sei denn, Sie wollen das zulassen von HTML außerhalb der URL).
Fand es hier
http://www.xyz.com/~this-does-not-work!