9

この問題に対して私が見つけることができた最良の答えは 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 の使用法は維持する必要があります。おそらく、前/後処理のトリックですか?

4

1 に答える 1

4

「ハック」/ダクトテープのソリューションには満足していませんが、これが現在問題を解決している方法です。

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);
于 2013-11-20T19:18:41.280 に答える