ホームページ  >  記事  >  バックエンド開発  >  なぜ私の「」なのでしょうか?

なぜ私の「」なのでしょうか?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-06 21:34:02166ブラウズ

Why is my ``?

不要 < HTML テンプレートでのエスケープ: text/template で解決されました

ファイル生成用のテンプレート、特に Readme とライセンスを利用する開発ツール内で最近の問題が発生しました。 < が使用されている場合を除いて、すべてがシームレスに動作しました。文字は < に変換されます。ただし、対応する >

問題を説明するために、次のコード スニペットを考えてみましょう:

<code class="pawn">#include <{{.Repo}}><p>ここでは、Repo パラメータが期待どおりに挿入されているはずで、結果は次のようになります。</p>
<pre class="brush:php;toolbar:false">#include <sometext>

しかし、実際の結果は次のとおりでした:

#include &amp;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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。