PHP需要帮助将URL转换为来自用户输入的链接

时间:2013-11-08 06:32:54

标签: php regex url hyperlink preg-match-all

我有一个textarea字段,我想让用户输入任何文本(包括但不限于网址)。我为输入禁用了html,因此不允许使用标记。我需要能够将这些类型的网址转换为链接:

http://example.com
www.example.com
example.com
http://example.com/path/to/something
http://example.com/path/to/something.php?v1=a&v2=b

或者基本上用户可以从浏览器中复制/粘贴的任何网址。我接近获得一个功能齐全的版本,但我的正则表达式与www.example.com文本无法正常工作。这是我正在使用的PHP代码:

// Convert links in a string to links
function linkify($str)
{   
    // Change www.example.com into http://www.example.com
    $str = str_replace('www.', 'http://www.', $str);
    $str = str_replace('http://http://www.', 'http://www.', $str);

    // Find and replace
    $exp = '@(http)?(s)?(://)?(([-\w]+\.)+([^\s]+)+[^,.\s])@';
    preg_match_all($exp, $str, $matches);
    $matches = array_unique($matches[0]);
    foreach($matches as $match) 
    {
        $replacement = '<a href="'.$match.'">'.$match.'</a>';
        $str = str_replace($match, $replacement, $str);
    }
    return $str;
}

任何人都可以帮我调整我的代码,让它与所有示例网址一起使用吗?

0 个答案:

没有答案