2016-11-09 48 views
2

我正在嘗試設置一個模板,該模板將成爲在PHP中使用DOM的TWIG文件。所以我成立了DOM和刮我從獲取模板網站:如何在PHP中使用DOMDocument節點的特殊字符來設置屬性?

$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保存作爲一個嫩枝文件:

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> 

所以我需要以某種方式阻止它這樣做url編碼。任何方式來做到這一點?

+0

你可以使用saveXML嗎?這並不表現出這種行爲。 (但是確實添加了一個XML序言,不知道這是否會成爲一個違規者。) – CBroe

回答

2

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

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

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

我已經將此設置爲默認答案,並將其更改爲一個班輪,因爲它將我的答案更改爲一個班輪,我將稍後更新它比src更匹配。 – MicWit

0

所以我在此刻唯一的答案是用了preg_replace它發送到樹枝文件之前修改$ pageHtml:

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

第一行會取代開始的資產標籤和第二行是結束資產,並將執行CSS,JavaScript以及任何其他可能使用資產標籤的區域。

我感覺好像這不是最乾淨的選項,但目前它是我能找到的最乾淨的選項。如果有人能想出更好的選擇,我會將其作爲答案。

相關問題