PHP 将所有网址转换为 html 链接


PHP Convert all urls into html links

可能的重复项:
将文本中的网址替换为 HTML 链接

我正在通过下面的函数传递包含多个 url 的字符串变量,以便仅通过正确的 HTML 链接获得相同的东西。

public function convertUrlsToLinks($text){
    return preg_replace( '@(?<![.*">])'b(?:(?:https?|ftp|file)://|[a-z]'.)[-A-Z0-9+&#/%=~_|$?!:,.]*[A-Z0-9+&#/%=~_|$]@i', '<a href="'0" target="_blank">'0</a>', $text );
}

它根本不起作用。我错过了什么?

代码必须跳过现有链接,<img>src值(或类似的东西)。

假设你已经有一个html文档,我将URL的识别限制为:

  • 不以"
  • 从 HTTP 或 www 开始

我想出了这样的解决方案:

$string = 'lorem ipsum www.foo.bar dolor sit <a href="http://fail.org">http://fail.org</a><img src="www.foo.bar"> amet http://abc.de.fg.com?bar=baz';
$rx = '%[^"](?P<link>(?:https?://|www'.)(?:[-_a-z0-9]+'.)+(?:[a-z]{2,4}|museum/?)(?:[-_a-z0-9/]+)?(?:'?[-_a-z0-9+'%=&]+)?(?!</a)('W|$))%ui';
echo preg_replace_callback($rx, function($matches) {
    return '<a href="'.$matches['link'].'">'.$matches['link'].'</a>';
}, $string).PHP_EOL;

输出字符串为

lorem ipsum<a href="www.foo.bar ">www.foo.bar </a>dolor sit <a href="http://fail.org">http://fail.org</a><img src="www.foo.bar"> amet<a href="http://abc.de.fg.com?bar=baz">http://abc.de.fg.com?bar=baz</a>

正则表达式应该可以正常工作,您的示例字符串可能会有所帮助