0

我的问题是如何在这个例子中替换一个字符串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决定如何很好地格式化输出并更好地反映我们应该期待的内容!

4

0 回答 0