php - 使用 PHP 的 DOMDocument 时避免百分比编码 href 属性

标签 php html xslt domdocument percent-encoding

对于这个问题,我能找到的最佳答案是使用 XSLT,但我只是不确定如何将这些答案应用到我的问题中。

基本上,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 用法必须保留。那么也许是前/后处理技巧?

最佳答案

我对“黑客”/管道胶带解决方案不满意,但这就是我目前解决问题的方式:

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);

关于php - 使用 PHP 的 DOMDocument 时避免百分比编码 href 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20102346/

相关文章:

php - 在 Symfony2 buildForm() 中连接属性

php - 克隆如何创建单例的新版本?

javascript - 将 CSV 数据导入 HTML 表单

javascript - 如何在文本框的开头和结尾 trim 空格?

java - XSLT xmlXPathCompOpEval : function new not found

xml - XSL 检查直接在前的兄弟

php - MVC(Laravel)在哪里添加逻辑

javascript - 如何从 PHP 将 JSON 传回我的 AJAX 请求?

html - 将错误文本构建到输入组中

xslt - 使用 XSL-FO 和 HTML?