2013-03-28 2 views
1

이것은 현재 가지고있는 코드입니다. 매번 반송 결과에 hrefhttp://을 포함하도록 조정하는 방법은 무엇입니까? 현재 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

당신은 단지 시작에 추가 할 수 없습니다해야합니까? –

답변

2

을 $ URL은 http를 가지고 있는지 알 수 없기 때문에 : 단지 시작에 충실하고 그냥 경우에 제거되고 있는지 확인 // 그것에 여부. 당신이 함수에서 반환 할 때이 같은

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

나는이 접근법의 단순함을 좋아하지만, 문자열의 시작 부분에서 단지 'http : //'를 대치하는 것이 더 안전 할 것이다. – Jim

+0

완벽합니다. 감사! – Tom

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

뭔가가