2013-03-28 103 views
1

这是我目前拥有的代码。我会如何调整它在每次返回的结果中包含http://href?目前,http://不在返回的结果中,除非它在原始字符串变量$text中。如果它不在原来的$text中,我希望将它添加到href。谢谢!在这个PHP URL缩短代码中包含“http://”

function urlfixer($text){ 

    $pattern = '#\b(([\w-]+://?|www[.])[^\s()<>]+(?:\([\w\d]+\)|([^[:punct:]\s]|/)))#'; 
    $callback = create_function('$matches', ' 
     $url  = array_shift($matches); 
     $url_parts = parse_url($url); 

     $text = parse_url($url, PHP_URL_HOST) . parse_url($url, PHP_URL_PATH); 
     $text = preg_replace("/^www./", "", $text); 

     $last = -(strlen(strrchr($text, "/"))) + 1; 
     if ($last < 0) { 
      $text = substr($text, 0, $last) . "&hellip;"; 
     } 

     return sprintf(\'<a rel="nofollow" href="%s">%s</a>\', $url, $text); 
    '); 

    return preg_replace_callback($pattern, $callback, $text); 
} 
+0

你不能只是将其追加到刚开始的时候,你从你的函数返回? – 2013-03-28 03:15:41

回答

2

既然你不知道,如果你的$网址有HTTP:对与否//只是把它贴在一开始,并确保它的剥离,以防万一。

$url = 'http://' . str_replace('http://','',$url); 
return sprintf('<a rel="nofollow" href="%s">%s</a>', $url, $text); 
+2

我喜欢这种方法的简单性,但它只是在字符串开头替换“http://”的出现可能更安全一些。 – Jim 2013-03-28 03:18:45

+0

完美。谢谢! – Tom 2013-03-28 03:28:21

1
$url  = array_shift($matches); 
if(substr($url,0,6)!='http://') { 
    $url='http://'.$url; 
} 

这样的事情应该去做