2013-11-28 106 views
1

我有一個HTML片段,其中有一個圖像的地方。我想要替換src屬性的值。即從像得到:從img替換src屬性,同時保留其他屬性(如寬度和高度)

<div style="position: relative" class="img-p"><a href="http://politiken.dk/indland/ECE2145750/nu-kommer-loven-om-alkolaase-spritbilister-skal-betale-6000-kr/"><img src="http://multimedia.pol.dk/archive/00802/RB_PLUS_Danskerne___802815p.jpg" width="369" height="253" alt="SPRITKONTROL" /></a></div> 

爲了這樣的事情:

<div style="position: relative" class="img-p"><a href="http://politiken.dk/indland/ECE2145750/nu-kommer-loven-om-alkolaase-spritbilister-skal-betale-6000-kr/"><img src="http://multimedia.pol.dk/archive/00802/SNOOTS.jpg" width="369" height="253" alt="SPRITKONTROL" /></a></div> 

我已經試過:

$content = preg_replace('/<img\s+src="([^"]+)"[^>]+>/i', '<img src="http://multimedia.pol.dk/archive/00802/SNOOTS.jpg"', $string); 
echo htmlspecialchars($content); 

但是,刪除的寬度和高度和alt屬性。

+1

可能會更好地使用DOM文檔()按如下說明:http://stackoverflow.com/questions/2120779/regex-php-isolate-src-attribute-from-img-標記 – JakeGould

+0

已經嘗試過,傑克。 – Morten

+0

那麼,我編寫了一個按預期工作的示例。 – JakeGould

回答

0

給這一個鏡頭:<img\s+src=["']([^'"]+)["']

(替換爲:<img src="http://multimedia.pol.dk/archive/00802/SNOOTS.jpg"

轉換這樣的:

<img src="http://multimedia.pol.dk/archive/00802/RB_PLUS_Danskerne___802815p.jpg" width="369" height="253" alt="SPRITKONTROL" />

這樣:

<img src="http://multimedia.pol.dk/archive/00802/SNOOTS.jpg" width="369" height="253" alt="SPRITKONTROL" />

下面是一個工作示例:http://regex101.com/r/uE6oG5

+0

我在你給我的鏈接上看到了你的工作示例...令人印象深刻...你能告訴我如何把正則表達式放到PHP preg_replace中嗎? – Morten

+0

舉一個例子,只需將'preg_replace'改爲:'preg_replace('/ JakeGould

2

好的,而不是使用正則表達式邏輯,那麼使用DOMDocument()而不是?這個例子對我的作品:

# Source HTML for this example. Broken up into lines for readability. 
$html_value = '<div style="position: relative" class="img-p">' 
      . '<a href="http://politiken.dk/indland/ECE2145750/nu-kommer-loven-om-alkolaase-spritbilister-skal-betale-6000-kr/">' 
      . '<img src="http://multimedia.pol.dk/archive/00802/RB_PLUS_Danskerne___802815p.jpg" width="369" height="253" alt="SPRITKONTROL" />' 
      . '</a>' 
      . '</div>' 
      ; 

# The new `img src` URL. 
$new_img_src = 'http://multimedia.pol.dk/archive/00802/SNOOTS.jpg'; 

# Instantiate `DOMDocument()` 
$dom = new DOMDocument(); 

# Laod the HTML into `DOMDocument()` 
$dom->loadHTML($html_value); 

# Parse the `img` tags. 
$img_tags = $dom->getElementsByTagName('img'); 

# Roll through the `img` tags. 
foreach ($img_tags as $tag) { 

    # Set the `src` attribute to be the new value. 
    $tag->setAttribute('src', $new_img_src); 

    # Save the tag into the HTML. 
    $dom->saveHTML($tag); 
} 

# Strip out the DOCTYPE, html & body tags. 
$final_tags = preg_replace('~<(?:!DOCTYPE|/?(?:html|body))[^>]*>\s*~i', '', $dom->saveHTML()); 

# Echo the final tags. 
echo $final_tags; 
+0

它被包裝在DOCTYPE和HTML標籤中 – Morten

+0

現在就試用它,使用'preg_replace'去除所有其他的東西,從這裏得到這個提示http://stackoverflow.com/questions/11216726/ PHP-DOM文檔,而無需最DTD的頭部和身體標籤 – JakeGould