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

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

Linda Hamilton
リリース: 2024-10-30 14:59:02
オリジナル
981 人が閲覧しました

How to Properly Render Line Breaks in HTML Templates?

改行を
に置き換えます。 HTML テンプレート内

HTML テンプレートで改行 (n) をマークアップ (
) に置き換えると、エスケープが原因で予期しない動作が発生する可能性があります。ロードされた文字列がテンプレートに渡されると、改行は
にエスケープされ、改行ではなくリテラル テキストとして表示されます。

解決策:

この問題に対処するには、テンプレートで使用する前にテキストを前処理します。方法は次のとおりです:

  1. 入力をサニタイズします: template.HTMLEscape() 関数を使用してテキストをサニタイズし、潜在的に悪意のあるフラグメントを削除します。
  2. 改行の置換: サニタイズ後、改行 (n) をマークアップ (
    ) で置き換えます。
  3. HTML で折り返す: template.HTML を使用して、前処理されたテキストを HTML としてカプセル化します。 。これにより、テンプレート エンジンはコンテンツが安全であることを確認します。
  4. テンプレートを実行します。 サニタイズおよび前処理されたテキストをレンダリングのためにテンプレートに渡します。

コード例:

<code class="go">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)) // Encapsulate as HTML
}</code>
ログイン後にコピー

このコードは、入力テキスト内の悪意のあるコンテンツが確実に無力化され、マークアップを使用して改行を適切にレンダリングできるようにします。

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

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