ホームページ  >  記事  >  バックエンド開発  >  エスケープせずに HTML を Go テンプレートに挿入するにはどうすればよいですか?

エスケープせずに HTML を Go テンプレートに挿入するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-10-30 04:38:28888ブラウズ

How Can I Insert HTML into Go Templates Without Escaping?

Go テンプレートへの HTML の挿入

Go テンプレートを使用する場合、予期しない動作を避けるために HTML コンテンツを挿入する方法を検討することが重要です。たとえば、HTML コードを含む文字列を挿入すると、不要な文字エスケープが発生し、不正確な出力が発生する可能性があります。

Go テンプレートで HTML 挿入を正しく処理するには、次のガイドラインに従ってください:

Pass template.HTML としての HTML:

文字列を直接渡す代わりに、HTML コンテンツを template.HTML 型でラップします。これにより、テンプレート エンジンにコンテンツを生の HTML として扱い、文字のエスケープを防止するよう指示します。

例:

<code class="go">tpl := template.Must(template.New("main").Parse(`{{define "T"}}{{.Html}}{{.String}}{{end}}`))
tplVars := map[string]interface{} {
    "Html": template.HTML("<p>Paragraph</p>"),
    "String": "<p>Paragraph</p>",
}
tpl.ExecuteTemplate(os.Stdout, "T", tplVars)

//OUTPUT: <p>Paragraph</p>&amp;lt;p&amp;gt;Paragraph&amp;lt;/p&amp;gt;</code>

文字列の受け渡しを避ける:

HTML コンテンツを文字列として渡すと、望ましくないエスケープが発生する可能性があります。例:

<code class="go">tpl := template.Must(template.New("main").Parse(`{{define "T"}}{{.Html}}<p>{{.String}}</p>{{end}}`))
tplVars := map[string]interface{} {
    "Html": "<p>Paragraph</p>",
    "String": "<p>Paragraph</p>",
}
tpl.ExecuteTemplate(os.Stdout, "T", tplVars)

//OUTPUT: <p>Paragraph</p>&amp;lt;p&amp;gt;Paragraph&amp;lt;/p&amp;gt;</code>

JSON データ:

JSON データをテンプレートに挿入する場合は、encoding/json などのライブラリを使用してエンコードできます。文字列として。次に、エンコードされた文字列をテンプレートに渡し、json テンプレート関数を使用してテンプレート内でデコードできます。

以上がエスケープせずに HTML を Go テンプレートに挿入するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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