如何在img标记的src属性中添加引号

时间:2015-04-01 15:02:20

标签: php html regex

我在数据库中找到了几个类似的帖子:

<a href="somelink.html"><img src=someimage.jpg border=1 alt="some text"></a>

所以我需要:

  • 删除border = 1属性(str_replace将完成工作)
  • 在src属性的开头和结尾添加引号:src =&#34; someimage.jpg&#34;
  • 使用添加/&gt;关闭img标记在标签的末尾

我尝试的一件事是解析dom并获得SRC源:

$doc = new DOMDocument();
    $body = $this->removeUnnecessaryTags($body);
    $doc->loadHTML($this->removeUnnecessaryTags($body));
    $imageTags = $doc->getElementsByTagName('img');

    foreach($imageTags as $tag) {
        $result[] = [ 'src' => $tag->getAttribute('src'), 'alt' => $tag->getAttribute('alt') ];
    }

我知道这可以用正则表达式完成,但我的正则表达式知识不是很好。有什么想法吗?

由于

1 个答案:

答案 0 :(得分:2)

您只需要使用DOMDocument功能和libxml选项:

$html = '<a href="somelink.html"><img src=someimage.jpg border=1 alt="some text"></a>';

libxml_use_internal_errors(true);
$dom = new DOMDocument;
$dom->loadHTML($html, LIBXML_HTML_NODEFDTD | LIBXML_HTML_NOIMPLIED);

$result = $dom->saveXML($dom->documentElement);

echo $result;

LIBXML_HTML_NODEFDTD阻止在DTD丢失时自动添加DTD。 LIBXML_HTML_NOIMPLIED阻止在丢失时添加html和body标记。

saveXML方法将使用符合XML的语法保存文档,因此它解决了自闭标签问题。 $dom->documentElement用作参数以避免自动添加的xml声明。(*)

无论使用哪种方法(saveXML或saveHTML),都会使用双引号自动包含属性。

(*)这也将删除最终的DTD,因此如果要保留它,可以使用此变通方法删除xml声明:

$result = $dom->saveXML();
$result = substr($result, strpos($result, "\n") + 1);