我的问题是如何在这个例子中替换一个字符串src
中的标签的值<script>
(好吧,我在标签内属性的更一般场景中需要这个):
$data = <<<EOD
<script language="javascript" src= "../tests/ajax-navigation.js"></script>
...
<script language="javascript" type="text/javascript">
...
<img src="../404.jpg" alt="404">
...
EOD;
preg_replace()
我在这里发布了另一个问题,但由于对此有很大的争论,我决定DOMDocument
在 php 中使用这个函数:
public static function replacePropertyDOM($html, $tag, $property, $alias){
$dom = new \DOMDocument();
@$dom->loadHTML($html);
$dom->preserveWhiteSpace = true;
$els = $dom->getElementsByTagName($tag);
foreach($els as $el){
if($el->hasAttribute($property)){
$el->removeAttribute($property);
$el->setAttribute($property, $alias);
}
}
return $dom->saveHTML();
}
我这样称呼:
$data = Search::replacePropertyDOM($data, "script", "src", $alias);
不过我有一些问题:
似乎
DOMDocument
并没有在代码中保留我所有的换行符如果我
$dom->loadHTML($html);
不使用,@
我会收到代码为 2 的警告,如下所示:DOMDocument::loadHTML():意外的结束标记:实体中的链接,行:9
<head>
像这样的链接
<link rel="stylesheet" type="text/css" href="../tests/ajax-navigation.css"></link>
甚至更糟
DOMDocument::loadHTML(): Unexpected end tag : b in Entity, line: 33
对于 js 命令
mydebug.innerHTML = '<p><b>Test $$.ccl.ajax.getInstance()</b></p>';
- 最后一个:找到这些标签并在我的数据中进行字符串替换,这样在返回 html 字符串时不再出现格式错误,这不是更好吗?
好的,我会坚持我的解决方案,但会稍作改动
$dom->preserveWhiteSpace = false;
$dom->formatOutput = true;
因此,DOMDocument
决定如何很好地格式化输出并更好地反映我们应该期待的内容!