【发布时间】:2017-07-10 17:46:40
【问题描述】:
我想对部分文档 HTML 文档进行一些替换。假设,我想在img 标签的src 参数上添加一些内容。
(示例)替换:
<p>hello</p><img src="REPLACE" /><p></p>
作者:
<p>hello</p><img src="http://example.org/image.jpeg" /><p></p>
我确实想使用 DOMDocument 来实现这一点,所以我编写了如下代码:
$doc = new \DOMDocument( '1.0', 'utf-8');
$doc->loadHTML('<p>hello</p><img src="REPLACE" /><p></p>');
$tags = $doc->getElementsByTagName('img');
foreach ($tags as $tag) {
$tag->setAttribute('src', 'http://example.org/image.jpeg');
}
var_dump($doc->saveHTML());
但它会返回:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><body>
<p>hello</p><img src="http://example.org/image.jpeg"><p></p>
</body></html>
这个返回有几个问题:
- 它使用了一个奇怪的文档类型:
HTML 4.0! - 它确实添加了一个 doctype、一个 html 标签和一个 body 标签。
我知道 DOMDocument 添加 doctype、html 和 body 标签是“正常的”,但是我可以避免这种情况吗?无论如何“只是”恢复我的 HTML 切片,只用我执行的替换?使用正则表达式不是一种选择,因为到处都有帖子说这是不好的做法。
旁注:我使用 Laravel,所以如果 Laravel 有开箱即用的东西,它也可能很棒!
【问题讨论】:
标签: php html laravel domdocument