ホームページ >バックエンド開発 >Golang >HTML テンプレートで改行を正しくレンダリングするにはどうすればよいですか?

HTML テンプレートで改行を正しくレンダリングするにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-10-30 20:02:02745ブラウズ

How to Render Newlines Correctly in HTML Templates?

改行を使用した HTML/テンプレートのエスケープ問題の克服

HTML テンプレートでは、n としてエンコードされた改行は HTML エンティティ (< br>) 実際の改行ではなく。これは、n 文字が信頼できるデータの一部として受け入れられるのではなく、テンプレートによってエスケープされる場合に発生します。

解決策: サニタイズと事前エスケープ

この問題を解決するには、次のようにします。次の手順に従ってください:

  1. テキストをサニタイズします: template.HTMLEscape() を使用して、有害な可能性のある文字をテキスト ファイルから削除します。
  2. 置換newlines: サニタイズ後、出現するすべての「n」を「
    」に置き換えます。
  3. 事前にエスケープされたデータを使用します: サニタイズされ置換されたテキストをテンプレートに渡しますtemplate.HTML として、安全な HTML フラグメントをカプセル化します。

実装例:

次のコードは、プロセスを示します:

<code class="go">package main

import (
    "html/template"
    "os"
    "strings"
)

const page = `<!DOCTYPE html>
<html>
  <head>
  </head>
  <body>
    <p>{{.}}</p>
  </body>
</html>`

const text = `first line
<script>dangerous</script>
last line`

func main() {
    t := template.Must(template.New("page").Parse(page))
    safe := template.HTMLEscapeString(text)
    safe = strings.Replace(safe, "\n", "<br>", -1)
    t.Execute(os.Stdout, template.HTML(safe))
}</code>

このコードはテキストをサニタイズし、改行を
に置き換えて、事前エスケープされたデータとしてテンプレートに渡します。レンダリングされた結果は、問題をエスケープすることなく、意図したとおりに改行を正しく表示します。

以上がHTML テンプレートで改行を正しくレンダリングするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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