ホームページ > バックエンド開発 > Golang > Go HTML コメントがレンダリングされたページで消えるのはなぜですか?

Go HTML コメントがレンダリングされたページで消えるのはなぜですか?

Patricia Arquette
リリース: 2024-11-02 05:09:03
オリジナル
879 人が閲覧しました

Why Are My Go HTML Comments Disappearing in Rendered Pages?

Go HTML コメントがレンダリングされない: template.HTML を使用した解決策

Go Web アプリケーションで、レンダリングされたページで HTML コメントが消えるイライラする問題になる可能性があります。これは、コンテナレス制御フロー構文に依存する KnockoutJS コードで特に問題になります。

この動作の背後にある理由は、デフォルトでは、Go の html/template パッケージがセキュリティ上の理由から HTML コンテンツをエスケープするためです。これは、 で囲まれた HTML コメントがコメントとして表示されるのではなく、エスケープされたテキストとしてレンダリングされることを意味します。

この問題を解決するために、html/template パッケージは特別なタイプを提供します。 template.HTML と呼ばれます。この型の値はレンダリング時にエスケープされません。

カスタム関数のアプローチ

1 つの効果的な解決策は、HTML コメントをテンプレートにラップするテンプレートのカスタム関数を作成することです。 .HTML。その方法は次のとおりです。

<code class="go">func main() {
    t := template.Must(template.New("").Funcs(template.FuncMap{
        "safe": func(s string) template.HTML { return template.HTML(s) },
    }).Parse(src))
    t.Execute(os.Stdout, nil)
}

const src = `<html><body>
{{safe "<!-- This is a comment -->"}}
<div>Some <b>HTML</b> content</div>
</body></html>`</code>
ログイン後にコピー

この例では、文字列引数を受け取り、それを template.HTML として返すsafe() 関数を定義します。テンプレート内では、{{safe ""}} を使用して、この関数に HTML コメントを渡すことができます。これにより、コメントがエスケープされなくなります。

使用法

この手法を使用するには、HTML コメントを次の形式に変換するだけです:

<code class="html">{{safe "<!-- Your comment -->"}}</code>
ログイン後にコピー

または

<code class="html">{{"<!-- Your comment -->" | safe}}</code>
ログイン後にコピー

このアプローチを使用すると、HTML コメントはレンダリングされた出力に保持されます。

注:

  • HTML コメントに引用符が含まれている場合は、必ず適切にエスケープしてください (例: {{safe ""}})。
  • 条件付き HTML の使用は避けてください。コメントはコンテキスト依存のエスケープ メカニズムを妨げる可能性があるためです。

以上がGo HTML コメントがレンダリングされたページで消えるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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