2013-11-20 50 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