用php的DOMDocument替换html标签的属性

时间:2013-08-03 10:42:35

标签: php replace tags domdocument

我的问题是如何替换字符串中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>';
  • 和最后一个:找到这些标签并继续在我的数据中进行字符串替换不是更好,所以在返回html字符串时不会出现格式化错误吗?

好的我会坚持使用我的解决方案进行一些小改动

$dom->preserveWhiteSpace = false; 
$dom->formatOutput = true; 

因此,DOMDocument决定如何很好地格式化输出并更加反思我们应该期待的东西!

0 个答案:

没有答案