ホームページ >バックエンド開発 >Golang >テンプレート内の「/」をエスケープする

テンプレート内の「/」をエスケープする

WBOY
WBOY転載
2024-02-06 09:45:081071ブラウズ

テンプレート内の「/」をエスケープする

質問内容

「avatars/avatar.png」のような文字列を渡したいのですが、テンプレートに渡すと文字が入ってしまいます逃げる。 そこで、テンプレートに渡される関数を書きました:

リーリー

しかし、依然として「未定義関数 'unescape'」が表示されます。アンエスケープは定義されていないのでしょうか?

「net/url」がインポートされました。


#正解


unescapeが定義されていませんか?

技術的にはいいえ。あなたはそれを定義しましたが、

遅すぎました。関数が定義されているかどうかは、実行中ではなく、解析中にチェックされます。 parseglob があり、それから tpl.func(...) を実行します。それは普通ではありません。

代わりに次のようにしてください:

リーリー

エスケープは

安全な 機能であり、その発生はデータを使用している コンテキスト および unescape# # に依存することに注意してください。 # エスケープは unescape の入力ではなく 出力 で行われるため、おそらく「ごまかし」を回避するのには役立ちません。 つまり、

{{unescape .}}

を実行すると、パーサーはコンテキストに応じて {{unescape . | urlescaper}} に変換する可能性があります (urlescaper は内部エスケープ関数です)。これを回避するには、テンプレート内で 既知の安全な文字列 をそのまま使用する場合は、unescape の代わりに input string を使用する必要があります。

プレイグラウンドの例

を参照してください。 コンテキスト、エスケープ、文字列の入力などの詳細については、

パッケージのドキュメント

を参照してください。すべてが明確に説明されています。

以上がテンプレート内の「/」をエスケープするの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。