不要 < HTML テンプレートでのエスケープ: text/template で解決されました
ファイル生成用のテンプレート、特に Readme とライセンスを利用する開発ツール内で最近の問題が発生しました。 < が使用されている場合を除いて、すべてがシームレスに動作しました。文字は < に変換されます。ただし、対応する >
問題を説明するために、次のコード スニペットを考えてみましょう:
<code class="pawn">#include <{{.Repo}}><p>ここでは、Repo パラメータが期待どおりに挿入されているはずで、結果は次のようになります。</p> <pre class="brush:php;toolbar:false">#include <sometext>
しかし、実際の結果は次のとおりでした:
#include &lt;sometext>
文書分析では、これについて明確な説明はありませんでした。 行動。 >にとってそれは非論理的であるように思えました。 < の間、文字は影響を受けません。文字がエスケープされました。
解決策は、HTML/テンプレートの目的を理解することにあります。これは、HTML 出力を生成するために特別に設計されており、コード インジェクションを防ぐために自動コンテキスト依存エスケープを提供します。ドキュメントには、
html/template は HTML 出力の生成のみを目的としていると明確に記載されています。これは、パッケージ text/template と同じインターフェイスを提供し、出力が HTML である場合は常に text/template の代わりに使用する必要があります。
ここでの Readme ファイルの場合のように、出力が HTML でない場合は、テキスト/テンプレートを使用する方が適切です。このテンプレート エンジンはデータをエスケープしないため、不要な文字変換の問題が解決されます。 text/template に切り替えることで、期待どおりの出力が得られました。
#include <sometext>
html/template と text/template のこの区別により、状況依存のエスケープが必要な場合にのみ適用され、非言語での予期しない文字変換が防止されます。 -HTML 出力シナリオ。
以上がなぜ私の「」なのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。