我的问题是如何替换字符串中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()
here发布了另一个问题,但由于对此有一个很大的争论,我决定在php中使用DOMDocument
这个函数:
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>';
好的我会坚持使用我的解决方案进行一些小改动
$dom->preserveWhiteSpace = false;
$dom->formatOutput = true;
因此,DOMDocument
决定如何很好地格式化输出并更加反思我们应该期待的东西!