2009-07-17 13 views
5

잠시 동안 PHP를 사용하여 문자열을 가져 오는 코드를 검색했습니다. 기본적으로 메시지에서 단축 URL을 얻으려고 시도하고 나중에 실제 링크를 찾기 위해 HEAD 요청을 수행하려고합니다.문자열에서 URL 가져 오기

누구나 문자열에서 URL을 반환하는 코드가 있습니까?

미리 감사드립니다. 고스트 개에 대한

편집 : 여기 해결 내가 가진 응답한다

$test = "I am testing this application for http://test.com YAY!"; 

을 그리고 :

$regex = '$\b(https?|ftp|file)://[-A-Z0-9+&@#/%?=~_|!:,.;]*[-A-Z0-9+&@#/%=~_|]$i'; 

preg_match_all($regex, $string, $result, PREG_PATTERN_ORDER); 
$A = $result[0]; 

foreach($A as $B) 
{ 
    $URL = GetRealURL($B); 
    echo "$URL<BR>";  
} 


function GetRealURL($url) 
{ 
    $options = array(
     CURLOPT_RETURNTRANSFER => true, 
     CURLOPT_HEADER   => true, 
     CURLOPT_FOLLOWLOCATION => true, 
     CURLOPT_ENCODING  => "", 
     CURLOPT_USERAGENT  => "spider", 
     CURLOPT_AUTOREFERER => true, 
     CURLOPT_CONNECTTIMEOUT => 120, 
     CURLOPT_TIMEOUT  => 120, 
     CURLOPT_MAXREDIRS  => 10, 
    ); 

    $ch  = curl_init($url); 
    curl_setopt_array($ch, $options); 
    $content = curl_exec($ch); 
    $err  = curl_errno($ch); 
    $errmsg = curl_error($ch); 
    $header = curl_getinfo($ch); 
    curl_close($ch); 
    return $header['url']; 
} 

을 여기

내가 구문 분석하고 어떤 샘플입니다 자세한 내용은 응답을 참조하십시오. 같은

+0

당신의 예를 보여주세요. 다시 파싱 – ghostdog74

답변

10

:

http://www.phpfreaks.com/forums/index.php/topic,245248.msg1146218.html#msg1146218

<?php 
$string = "some random text http://tinyurl.com/9uxdwc some http://google.com random text http://tinyurl.com/787988"; 

$regex = '$\b(https?|ftp|file)://[-A-Z0-9+&@#/%?=~_|!:,.;]*[-A-Z0-9+&@#/%=~_|]$i'; 

preg_match_all($regex, $string, $result, PREG_PATTERN_ORDER); 
$A = $result[0]; 

foreach($A as $B) 
{ 
    $URL = GetRealURL($B); 
    echo "$URL<BR>"; 
} 


function GetRealURL($url) 
{ 
    $options = array(
     CURLOPT_RETURNTRANSFER => true, 
     CURLOPT_HEADER   => true, 
     CURLOPT_FOLLOWLOCATION => true, 
     CURLOPT_ENCODING  => "", 
     CURLOPT_USERAGENT  => "spider", 
     CURLOPT_AUTOREFERER => true, 
     CURLOPT_CONNECTTIMEOUT => 120, 
     CURLOPT_TIMEOUT  => 120, 
     CURLOPT_MAXREDIRS  => 10, 
    ); 

    $ch  = curl_init($url); 
    curl_setopt_array($ch, $options); 
    $content = curl_exec($ch); 
    $err  = curl_errno($ch); 
    $errmsg = curl_error($ch); 
    $header = curl_getinfo($ch); 
    curl_close($ch); 
    return $header['url']; 
} 

?> 

는 다음과 같이 간단하게 무언가를 밖으로 URL을 얻을 고려
+0

그래, 그게 내가 필요한거야. –

2

뭔가 :

$matches = array(); 
preg_match_all('/http:\/\/[a-zA-Z0-9.-]+\/[a-zA-Z0-9.-]+/', $text, $matches); 
print_r($matches); 

당신은 정확하게 당신이 원하는 것을 얻을 조정에 정규 표현식을해야합니다. 이 코드는 (MadTechie의 최신 게시물을 참조) 도움이 될 수있다

curl -I http://url.com/path | grep Location: | awk '{print $2}'

+0

필요 없음 grep : curl -I http://url.com/path | awk '/ Location/{print $ 2}' – ghostdog74