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

関連する問題