2013-03-28 104 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; 
} 

這樣的事情應該去做