从img替换src属性,同时保留其他属性(如宽度和高度)

时间:2013-11-28 22:08:15

标签: php regex

我有一个html片段,里面有图片。我想替换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属性。

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分: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