PHP - 添加链接到字符串中的URL

时间:2010-11-18 16:52:24

标签: php regex string function url

我有一个功能,可以在链接之前添加<a href>标记,在链接之后添加</a>。但是,它打破了一些网页。你会如何改进这个功能?谢谢!

function processString($s) 
{
    // check if there is a link

    if(preg_match("/http:\/\//",$s))
    {
        print preg_match("/http:\/\//",$s);


        $startUrl =  stripos($s,"http://");

        // if the link is in between text
        if(stripos($s," ",$startUrl)){
            $endUrl = stripos($s," ",$startUrl);
        }
        // if link is at the end of string
        else {$endUrl = strlen($s);}

        $beforeUrl = substr($s,0,$startUrl);
        $url = substr($s,$startUrl,$endUrl-$startUrl);
        $afterUrl = substr($s,$endUrl);

        $newString = $beforeUrl."<a href=\"$url\">".$url."</a>".$afterUrl;

        return $newString;
    }

    return $s;
}

3 个答案:

答案 0 :(得分:19)

function processString($s) {
    return preg_replace('/https?:\/\/[\w\-\.!~#?&=+\*\'"(),\/]+/','<a href="$0">$0</a>',$s);
}

答案 1 :(得分:1)

包含“特殊”HTML字符的所有网址都会中断。为了安全起见,在将它们连接在一起之前,通过htmlspecialchars()传递三个字符串组件(除非你想在URL之外允许HTML)。

答案 2 :(得分:1)

function processString($s){
  return preg_replace('@((https?://)?([-\w]+\.[-\w\.]+)+\w(:\d+)?(/([-\w/_\.]*(\?\S+)?)?)*)@', '<a href="$1">$1</a>', $s);
}

找到它here