2016-11-23 1 views
0

Недавно я включил автоматическое экранирование в Freemarker и изменил файлы .ftl на .ftlh, чтобы убедиться, что они отформатированы/экранированы как HTML. Однако это означает, что любые теги inline <script> или <style> вызывают HTML-экранирование, чего я не хочу. Я могу решить эту проблему, делая это:Многоязычный авто-побег в Freemarker

<script> 
    [#outputformat "JavaScript"] 
     jQuery(".stuff").blah(); 
    [/#outputformat] 
</script> 

Это работает, но кажется, что много работы, чтобы добавить эту обертку вокруг содержимого каждого сценария тега. Похоже, имеет смысл иметь OutputFormat, который достаточно умен, чтобы обнаруживать теги сценария/стиля и использовать правильный формат, или альтернативные пользовательские теги, которые имеют тот же эффект, что и выше. Что-то вроде:

[@smartscript] 
    jQuery(".stuff").blah(); 
[/@smartscript] 

Неужели что-то подобное (или что-то еще, что решает эту проблему) уже существует? Я ничего не смог найти.

ответ

1

Кроме шаблонов предварительной обработки в пользовательском TemplateLoader (который обертывает другой TemplateLoader и фильтрует возвращаемый им Reader), в настоящее время для этого нет решения. Макросы не помогут, потому что #outputformat не имеет эффекта времени исполнения. Он просто связывает разделы исходного кода FTL с выходным форматом.

+0

Спасибо! Есть ли где-нибудь я могу больше узнать о порядке и влиянии того, как оцениваются #outputformat и макрос, такие как @script? Мне трудно найти его в документах. – xdhmoore

+0

Существует глава об автоматических экранах и форматах вывода: http://freemarker.org/docs/dgui_misc_autoescaping.html#dgui_misc_autoescaping_overrideoformat. См. Параграф, в котором говорится, что «каждая позиция в шаблоне имеет связанный выходной формат». – ddekany

+0

Ах, отлично. Благодаря! – xdhmoore