Шаблон без необходимости экранирует `‹` в ``, но не `›`

Я работаю над инструментом разработки, который использует шаблоны для создания файлов, таких как файлы сведений и лицензии.

Все работает нормально, за исключением того, что один экземпляр символа < превращается в &lt; - соответствующий символ > работает нормально и отображается в выводе, как и ожидалось.

Файл шаблона: https://raw.githubusercontent.com/Southclaws/pawn-package-template/master/README.md интересующие строки:

```pawn
#include <{{.Repo}}>
```

Где Repo вставляется с ожидаемым результатом

#include <sometext>

Но что на самом деле выходит:

#include &lt;sometext>

Я не могу понять, почему это происходит из документов. Честно говоря, это похоже на ошибку, потому что, если бы она искала, от чего сбежать, она бы наверняка превратила > в &gt;, верно?


person Southclaws    schedule 30.01.2018    source источник


Ответы (1)


html/template обеспечивает автоматическое, контекстно-зависимое экранирование, защищенное от внедрения кода:

Шаблоны HTML обрабатывают значения данных как обычный текст, который необходимо закодировать, чтобы его можно было безопасно встроить в документ HTML. Экранирование зависит от контекста, поэтому действия могут появляться в контексте JavaScript, CSS и URI.

html/template предназначен только для создания вывода HTML:

Он предоставляет тот же интерфейс, что и пакет text/template, и его следует использовать вместо text/template всякий раз, когда вывод представляет собой HTML.

Если вывод не HTML, используйте text/template вместо этого, который не экранирует данные.

person icza    schedule 30.01.2018
comment
О боже, это было так просто... вот что я получаю за то, что слишком полагаюсь на автоимпортеров! Спасибо! - person Southclaws; 30.01.2018