ホームページ > バックエンド開発 > Golang > Go テンプレートでの HTML と JSON の意図しないエスケープを回避するには?

Go テンプレートでの HTML と JSON の意図しないエスケープを回避するには?

DDD
リリース: 2024-11-03 04:17:02
オリジナル
496 人が閲覧しました

How to Avoid Unintended Escaping of HTML and JSON in Go Templates?

Go テンプレートでの HTML と JSON のエスケープ

Go テンプレートでは、HTML と JSON を適切に処理して、意図しないエスケープを防ぐことが不可欠です。次のテンプレートを考えてみましょう。

<some_html> {{ .SomeOtherHTML }} </some_html>
ログイン後にコピー

出力が単に であると予想される場合。 のような特殊文字が使用される問題が発生する可能性があります。と & がエスケープされ、予期しない出力が発生します:

<some_html> <the_other_html/< </some_html>
ログイン後にコピー

HTML エスケープの解決策

これを防ぐには、HTML コードをテンプレートとして渡す必要があります。文字列ではなく HTML タイプ。 template.HTML は、コンテンツをエスケープしないように Go に指示する特別なタイプです。例:

<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)</code>
ログイン後にコピー

JSON エスケープの解決策

JSON をレンダリングする必要がある場合は、json.Marshal 関数を使用してバイトに変換する必要があります。配列。これにより、Go が JSON コンテンツをエスケープするのを防ぎます。例:

<code class="go">jsonBytes, _ := json.Marshal(data)
outputString := string(jsonBytes)</code>
ログイン後にコピー

これらのベスト プラクティスに従うことで、Go テンプレートで HTML と JSON を適切にエスケープすることができ、意図しない変更が加えられることなく目的の出力が得られます。

以上がGo テンプレートでの HTML と JSON の意図しないエスケープを回避するには?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート