Freemarker 中的多语言自动转义
Multi-language auto-escape in Freemarker
我最近在 Freemarker 中打开了自动转义并将我的 .ftl
文件更改为 .ftlh
以确保它们得到 formatted/escaped 作为 HTML。然而,这意味着任何内联 <script>
或 <style>
标签都会被 HTML 转义,这不是我想要的。我可以通过这样做来解决问题:
<script>
[#outputformat "JavaScript"]
jQuery(".stuff").blah();
[/#outputformat]
</script>
这行得通,但要在每个脚本标记的内容周围添加此包装器似乎需要做很多工作。拥有一个足够智能的 OutputFormat 来检测 script/style 标签并使用正确的格式,或者具有与上述相同效果的自定义标签似乎是有意义的。类似于:
[@smartscript]
jQuery(".stuff").blah();
[/@smartscript]
是否已经存在类似的东西(或解决此问题的任何东西)?我什么也没找到。
除了在自定义 TemplateLoader
中预处理模板(包装另一个 TemplateLoader
并过滤它返回的 Reader
),目前没有解决方案。宏也无济于事,因为 #outputformat
没有运行时效果。它只是将 FTL 源代码的各个部分与输出格式相关联。
我最近在 Freemarker 中打开了自动转义并将我的 .ftl
文件更改为 .ftlh
以确保它们得到 formatted/escaped 作为 HTML。然而,这意味着任何内联 <script>
或 <style>
标签都会被 HTML 转义,这不是我想要的。我可以通过这样做来解决问题:
<script>
[#outputformat "JavaScript"]
jQuery(".stuff").blah();
[/#outputformat]
</script>
这行得通,但要在每个脚本标记的内容周围添加此包装器似乎需要做很多工作。拥有一个足够智能的 OutputFormat 来检测 script/style 标签并使用正确的格式,或者具有与上述相同效果的自定义标签似乎是有意义的。类似于:
[@smartscript]
jQuery(".stuff").blah();
[/@smartscript]
是否已经存在类似的东西(或解决此问题的任何东西)?我什么也没找到。
除了在自定义 TemplateLoader
中预处理模板(包装另一个 TemplateLoader
并过滤它返回的 Reader
),目前没有解决方案。宏也无济于事,因为 #outputformat
没有运行时效果。它只是将 FTL 源代码的各个部分与输出格式相关联。