2012-04-30 26 views
3

我需要查看HTML字符串,並將src屬性爲相對地址的所有<img>標籤更改爲絕對URL。所以這個:正則表達式將<img>相對URL改爲絕對

<img src="puppies.jpg"> 

需要成爲:

<img src="http://sitename.com/path/puppies.jpg"> 

而忽略<img>標籤,其src屬性已經是絕對的。

我使用PHP,並假設我需要通過preg_replace()來運行這個。幫幫我!謝謝!

+3

[Javascript:REGEX將所有相對URL改爲絕對]的可能重複(http://stackoverflow.com/questions/7544550/javascript-regex-to-change-all-relative-ur-s-to-absolute) –

+0

這是針對JavaScript的,但原理是一樣的。 –

+0

考慮使用DomDocument類而不是preg來完成HTML內容。 –

回答

7

這是而不是一個正則表達式的工作。這是一個XML/DOM解析器的工作。

我想給DOMDocument一個鏡頭。

$DOM = new DOMDocument; 
$DOM->loadHTML($html); 

$imgs = $DOM->getElementsByTagName('img'); 
foreach($imgs as $img){ 
    $src = $img->getAttribute('src'); 
    if(strpos($src, 'http://sitename.com/path/') !== 0){ 
     $img->setAttribute('src', "http://sitename.com/path/$src"); 
    } 
} 

$html = $DOM->saveHTML(); 
+1

我upvoted,但它也需要檢查'src'屬性已經絕對,每OP。 – Mathletics

+0

@Mathletics:啊,是的,沒有注意到,我可以補充說:-P –

+1

+1,但我會用getElementsByTagName代替xpath –

-1

這不是正則表達式的工作。這是XML/DOM 解析器的工作。

不是這樣。如果你只是想一個前綴添加到每個src屬性,最好用簡單的字符串函數,甚至不認爲有關XML,正則表達式或DOM解析...

$str = str_replace('<img src="', '<img src="http://prefix', $str); 

可以清理錯誤的鏈接(已絕之後)

$str = str_replace('<img src="http://prefixhttp://', '<img src="http://', $str); 

不要用regexp/dom炸燬你的代碼,如果你能避免它。

+0

如果我的HTML是'',會發生什麼? –

+1

在那段代碼中,你會檢查相對URL嗎? –

+0

@Rocket遺憾,但他說他的HTML是''錯誤 – sbstjn