Ich schrieb diese Funktion, um alle spezifischen URLs (mywebsite.com) in Links zu konvertieren und andere URLs zu @@@ spam @@@ zu streichen.PHP regex spezifische URL und andere Streifen
function get_global_convert_all_urls($content) {
$content = strtolower($content);
$replace = "/(?:http|https)?(?:\:\/\/)?(?:www.)?(([A-Za-z0-9-]+\.)*[A-Za-z0-9-]+\.[A-Za-z]+)(?:\/.*)?/im";
preg_match_all($replace, $content, $search);
$total = count($search[0]);
for($i=0; $i < $total; $i++) {
$url = $search[0][$i];
if(preg_match('/mywebsite.com/i', $url)) {
$content = str_replace($url, '<a href="'.$url.'">'.$url.'</a>', $content);
} else {
$content = str_replace($url, '@@@[email protected]@@', $content);
}
}
return $content;
}
Das einzige Problem, das ich nicht lösen kann, ist, die Regex endet nicht im Leerzeichen, wenn 2 URLs in einer Zeile.
$content = "http://www.mywebsite.com/index.html http://www.others.com/index.html";
Ergebnis:
<a href="http://www.mywebsite.com/index.html http://www.others.com/index.html">http://www.mywebsite.com/index.html http://www.others.com/index.html</a>
Wie kann ich das Ergebnis unten erhalten:
<a href="http://www.mywebsite.com/index.html">http://www.mywebsite.com/index.html</a> @@@[email protected]@@
ich dies versucht haben, fügen Sie (\ s | $) am Ende der Regex aber kein Glück :
/(?:http|https)?(?:\:\/\/)?(?:www.)?(([A-Za-z0-9-]+\.)*[A-Za-z0-9-]+\.[A-Za-z]+)(?:\/.*)?(\s|$)/im
Ich denke, die Verbindung oben 'href =" http: //www.http://www.mywebsite.com "' ist auch falsch – RomanPerekhrest
komisch ... Ich erhalte dieses Ergebnis 'http://www.mywebsite.com @@@ spam @@@ '' mit Ihrem aktuellen Regex – RomanPerekhrest
@RomanPerekhrest Oppsss ... Entschuldigung, bitte versuchen Sie hinzuzufügen /index.h tml – richard