这是另一种解决方案,这将捕获所有 http/https/www 并转换为可点击的链接。
$url = '~(?:(https?)://([^\s<]+)|(www\.[^\s<]+?\.[^\s<]+))(?<![\.,:])~i';
$string = preg_replace($url, '<a href="$0" target="_blank" title="$0">$0</a>', $string);
echo $string;
或者只捕获 http/https 然后使用下面的代码。
$url = '/(http|https|ftp|ftps)\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/\S*)?/';
$string= preg_replace($url, '<a href="$0" target="_blank" title="$0">$0</a>', $string);
echo $string;
编辑:
下面的脚本将捕获所有 URL 类型并将它们转换为可点击的链接。
$url = '@(http)?(s)?(://)?(([a-zA-Z])([-\w]+\.)+([^\s\.]+[^\s]*)+[^,.\s])@';
$string = preg_replace($url, '<a href="http$2://$4" target="_blank" title="$0">$0</a>', $string);
echo $string;
新的更新,如果你让字符串去掉 (s) 然后使用下面的代码块,感谢@AndrewEllis 指出这一点。
$url = '@(http(s)?)?(://)?(([a-zA-Z])([-\w]+\.)+([^\s\.]+[^\s]*)+[^,.\s])@';
$string = preg_replace($url, '<a href="http$2://$4" target="_blank" title="$0">$0</a>', $string);
echo $string;
这里有一个非常简单的 URL 显示不正确的解决方案。
$email = '<a href="mailto:email@email.com">email@email.com</a>';
$string = $email;
echo $string;
这是一个非常简单的修复方法,但您必须根据自己的目的对其进行修改。
由于某些服务器的设置不同,我提供了多个答案,因此一个答案可能对某些人有用,但对其他人无效,但我希望答案对您有用,如果没有,请告诉我,并希望,我可以想出另一个解决方案。
有多个脚本,因为有些 PHP 文件需要不同的脚本,有些服务器的设置也不同,而且每个都有不同的要求,有些只需要 HTTP/S,有些只需要 WWW,有些需要 FTP/S,每个都可以工作关于用户自己的脚本是如何设置的,我为每个脚本提供了一些文字说明他们所做的事情。