2016-07-23 10 views
0

カールされたドキュメントのすべてのURLを絶対から絶対に変更できる正規表現を見つけようとしています。相対URLをCurlの後に絶対URLに変更する

私が見つけた方法の1つは投稿hereですが、それは最初のURLでのみ動作し、すべてではありません。

これは私が使用しているコードです:

私が間違っているの
$url="http://www.example.com"; 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL,$url); 
curl_setopt($ch, CURLOPT_FAILONERROR, 1);             
curl_setopt($ch, CURLOPT_DNS_USE_GLOBAL_CACHE, 0);        
curl_setopt($ch, CURLOPT_DNS_CACHE_TIMEOUT, 60);         
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);           
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);            
$result=curl_exec($ch); 
curl_close($ch); 
$result = preg_replace('~(href|src)=(["\'])(?!#)(?!http://)([^\2]*)\2~i','$1="http://www.example.com$3"', $result); 
echo $result; 

を?

EDIT 説明するだけです。私はURLの配列を持っていないが、私はカールから収集されたドキュメント全体を持っているので、私はpreg replaceメソッドが必要です。

+0

の可能性のある重複[Transfrom相対経路を絶対URLにPHPを使用して](http://stackoverflow.com/questions/4444475/transfrom-relative-path -into-absolute-url-using-php) –

+0

RamenChefの提案された変更でこのようにすることはできますが、http://stackoverflow.com/questions/4444475/transfrom- absolute-url-using-phpへの相対パス。 –

+0

ありがとうございますが、私はURLの配列を持っている場合、そのURLは動作します。この場合、私はhtml文書に置き換えが必要です – Luca

答えて

1

私は正確にそれが1回だけ(なぜならそれは後方参照と関係がある)を置き換えているとは確信していませんが、それをwhileループでラップするとうまくいくはずです。

$pattern = '~(href|src)=(["\'])(?!#|//|http)([^\2]*)\2~i'; 
while (preg_match($pattern, $result)) { 
    $result = preg_replace($pattern,'$1="http://www.example.com$3"', $result); 
} 

(Iもわずかにパターンを変更した。)

+0

素晴らしい!できます!!本当にありがとう – Luca