2009-07-17 21 views
5

少し前から、PHPを使用してURLを文字列から取得するコードを探してきました。私は基本的に、メッセージから短縮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']; 
} 

詳細についての回答を参照してください。あなたが正確に何をしたい得るためにチューニングする正規表現をする必要があります

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

:よう

+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']; 
} 

?> 
+0

ええ、それはまさに私が必要としていたものでした –

2

何か。

ような単純なものを検討し、アウトURLを取得するには:このコードは(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

関連する問題