我有一个简单的评论系统,人们可以在纯文本字段内提交超链接。当我将这些记录从数据库显示回到网页中时,可以使用PHP中的哪些RegExp将这些链接转换为HTML型锚链接?
我不希望算法通过任何其他类型的链接(仅http和https)来执行此操作。
这是另一种解决方案,它将捕获所有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;
这是一个非常简单的修复程序,但是您必须根据自己的目的对其进行修改。
我提供了多个答案,因为某些服务器的设置不同,所以一个答案可能对某些服务器有用,但对其他服务器不起作用,但是我希望这些答案对您有用,如果不能,请告诉我,希望我能提出另一个解决方案。