为了账号安全,请及时绑定邮箱和手机立即绑定

Go - 不呈现 HTML 注释

Go - 不呈现 HTML 注释

Go
qq_花开花谢_0 2021-11-29 16:40:40
我正在构建 go web 应用程序。我在渲染的 html 页面上发现了一些异常。我所有的 html 评论<!-- -->突然都没有被渲染。我猜是因为我用的go版本(刚刚更新到更高版本),因为在我更新之前还好。这是我的代码:<!-- prepare the breadcrumbs --><ul class="breadcrumb" data-bind="foreach: viewModel.breadcrumbs">    <!-- ko if: ($index() + 1) < len(viewModel.breadcrumbs()) -->    <li>        <a data-bind="attr: { href: href }">            <i class="fa fa-home"></i>             <span data-bind="text: title"></span>        </a>    </li>    <!-- /ko -->    <!-- ko if: ($index() + 1) == len(viewModel.breadcrumbs()) -->    <li class="active" data-bind="text: title"></li>    <!-- /ko --></ul>这是呈现的页面源:由于这个问题,我的许多使用无容器控制流语法编写的 KnockoutJS 代码变得疯狂,它根本不起作用。我该怎么做才能解决这个问题?提前致谢
查看完整描述

2 回答

?
Helenr

TA贡献1780条经验 获得超3个赞

包中有一个特殊类型html/template:template.HTML. 呈现模板时,模板中此类型的值不会被转义。


因此,您可以“标记”您的 HTML 注释template.HTML,以便在执行模板期间它们不会被转义或省略。


一种方法是为您的模板注册一个自定义函数,该函数可以从您的模板中调用,该函数接受一个string参数并将其返回为template.HTML. 您可以将所有 HTML 注释“传递”给此函数,因此,您的 HTML 注释将保留在输出中。


看这个例子:


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>`

输出(在Go Playground上试试):


<html><body>

<!-- This is a comment -->

<div>Some <b>HTML</b> content</div>

</body></html>

所以基本上在注册我们的safe()函数后,将所有 HTML 注释转换为调用此safe()函数并传递原始 HTML 注释的模板操作。


转换这个:


<!-- Some HTML comment -->

对此:


{{safe "<!-- Some HTML comment -->"}}

或者(无论你喜欢哪个):


{{"<!-- Some HTML comment -->" | safe}}

你很高兴去。


注意:如果您的 HTML 注释包含引号 ( '"'),您可以/必须像这样转义它:


{{safe "<!-- Some \"HTML\" comment -->"}}

注意#2:请注意,您不应该使用条件 HTML 注释,因为这可能会破坏html/template包的上下文敏感转义。

查看完整回答
反对 回复 2021-11-29
?
泛舟湖上清波郎朗

TA贡献1818条经验 获得超3个赞

您可以使用和(https://golang.org/pkg/text/template/#hdr-Functions)等内置函数text/template代替html/template并手动执行所有转义。请注意,这很容易出错。htmljs


查看完整回答
反对 回复 2021-11-29
  • 2 回答
  • 0 关注
  • 197 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信