簡體   English   中英

如何在PHP中使用帶有DOMDocument節點的特殊字符的setAttribute?

[英]How do I setAttribute with special characters of a DOMDocument node in PHP?

我正在嘗試使用PHP中的DOM設置一個模板為TWIG文件。 因此,我設置了DOM並抓取了要從中獲取模板的網站:

$dom = new DOMDocument('1.0');
$dom->loadHTMLFile('http://theurl.com');

然后我修改腳本的src並保存模板:

foreach ($domNode->childNodes as $node) {
  $node->setAttribute('src', "{{ asset('path/to/asset.js') }}");
}
$pageHtml = $dom->saveHTML();

然后將$ pageHtml保存為TWIG文件:

file_put_contents('path/to/file.twig', $pageHtml);

當我查看此文件時,現在有了腳本標記:

<script src="%7B%7B%20asset('path/to/asset.js')%20%7D%7D"></script>

我需要擁有的是:

<script src="{{ asset('path/to/asset.js') }}"></script>

所以我不知何故需要停止進行網址編碼。 有什么辦法嗎?

我不知道有什么方法可以避免這種百分比編碼。

解決此問題的一種方法是保存之前替換編碼的字符,例如

$pageHtml = $dom->saveHTML();
$pageHtml = preg_replace('|="%7B%7B%20(.*?)%20%7D%7D"|', '="{{ $1 }}"', $pageHtml);

因此,我目前唯一的答案是修改$ pageHtml,然后再使用preg_replace將其發送到TWIG文件中:

$pageHtml = preg_replace("|=\"%7B%7B%20asset|", "=\"{{ asset", $pageHtml);
$pageHtml = preg_replace("|\)%20%7D%7D\"|", ") }}\"", $pageHtml);

第一行將替換起始資產標簽,第二行將終止資產,並將執行css,javascript和其他可能使用資產標簽的區域。

我覺得這似乎不是最干凈的選擇,但目前它是我可以找到的最干凈的選擇。 如果有人可以提出更好的選擇,我將其作為答案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM