要链接的文本,没有https的链接有问题

时间:2019-01-18 13:33:29

标签: php regex

用户可以添加文本。这些文本可以具有链接。

我想添加点击。

问题是,某些链接的工作方式如下:

http://www.example.com

没有http的链接将不起作用,并将变为:

http://mywebsite.com/www.example.com

有什么解决方法的想法吗?

function toLink($titulo){
    $url = '~(?:(https?)://([^\s<]+)|(www\.[^\s<]+?\.[^\s<]+))(?<![\.,:])~i'; 
    $titulo = preg_replace($url, '<a href="$0" target="_blank" title="$0">$0</a>', $titulo);
    return $titulo;
}

1 个答案:

答案 0 :(得分:1)

改为使用preg_replace_callback,然后您可以查询匹配项以查看是否需要添加协议。

function toLink($titulo) {
    $url = '~(?:(https?)://([^\s<]+)|(www\.[^\s<]+?\.[^\s<]+))(?<![\.,:])~i'; 
    $titulo = preg_replace_callback($url, function($matches) {
        $url = $matches[0];
        if (!preg_match('/^https?:\/\//', $url)) $url = 'http://'.$matches[0];
        '<a href="'.$url.'" target="_blank" title="'.$url.'">'.$url.'</a>';
    }, $titulo);
    return $titulo;
}