2016-07-23 17 views
0

Ich versuche, einen regulären Ausdruck zu finden, der in der Lage ist, alle URLs eines curl'ed Dokuments von relativ zu absolut zu ändern.Ändern Sie relative URLs nach absoluten URLs nach Curl

Eine der Art, die ich gefunden habe, ist der Beitrag here, aber es funktioniert nur für die erste URL und nicht für alle.

Dies ist der Code, ich verwende:

$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; 

Wo mache ich falsch?

EDIT Nur um besser zu erklären. Ich habe nicht eine Reihe von URLs, aber ich habe ein ganzes Dokument von curl gesammelt, so dass ich eine Preg Replace-Methode brauche.

+0

Mögliches Duplikat [Transfrom relativen Pfad in absolute URL mit PHP] (http://stackoverflow.com/questions/4444475/transfrom-relative-path -into-absolute-url-using-php) –

+0

Sie könnten diesen Weg mit RamenChef's vorgeschlagene Änderung gehen, aber wird wahrscheinlich glücklicher mit einer robusteren Lösung sein wie die bei http://stackoverflow.com/questions/4444475/transfrom- relativer-pfad-in-absolute-url-using-php. –

+0

Vielen Dank, aber diese URL funktioniert, wenn ich ein Array von URLs habe. In diesem Fall brauche ich einen Ersatz in einem HTML-Dokument – Luca

Antwort

1

Ich bin nicht genau sicher, warum es nur einmal ersetzt (vielleicht hat es etwas mit der Rückreferenz zu tun), aber wenn Sie es in eine while Schleife wickeln, sollte es funktionieren.

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

(ich auch das Muster leicht verändert.)

+0

Großartig! Es klappt!! Wirklich vielen Dank – Luca