2013-11-20 48 views
7

我能夠找到的最佳答案是使用XSLT,但我不確定如何將這些答案應用於我的問題。使用PHP的DOMDocument時避免百分比編碼href屬性

基本上,DOMDocument正在做轉義URL(href屬性)傳遞進去,但我實際上使用它來構建Twig/Django樣式模板,我寧願讓它們獨處。這裏有一個具體的例子,說明「問題」:

<?php 
$doc = new DOMDocument(); 
$doc->loadHTML('<html><body>Test<br><a href="{{variable}}"></a></body></html>'); 
echo $doc->saveHTML(); 

,它輸出以下內容:

<html><body>Test<br><a href="%7B%7Bvariable%7D%7D"></a></body></html> 

是否有可能不是百分之編碼的href屬性?

如果不可能直接,你能提出一個簡潔可靠的解決方法嗎?我正在做其他處理,並且DOMDocument用法將不得不保留。所以也許是前/後處理技巧?

+0

DOM是偉大的操縱現有的文檔,但對於建築一個從頭開始的新文檔,最好只使用字符串操作,尤其是當您構建「模板看起來像html」時。 –

+0

我實際上在操縱現有的文檔。這是清楚說明問題的最短示例代碼。 –

+0

本質上,本例中使用的字符串將通過'file_get_contents()',*例如*加載。 –

回答

2

我不滿意「黑客」 /管磁帶的解決方案,但是這是我目前如何解決這個問題:

function fix_template_variable_tokens($template_string) 
{ 
    $pattern = "/%7B%7B(\w+)%7D%7D/"; 
    $replacement = '{{$1}}'; 
    return preg_replace($pattern, $replacement, $template_string); 
} 

$html = $doc->saveHTML(); 
$html = fix_template_variable_tokens($html); 
+0

是的,但這比'urldecode'解決方案更好:D – Epoc