Golang Go语言中 html/template 过滤 script 里的注释?

发布于 1周前 作者 nodeper 来自 Go语言

Golang Go语言中 html/template 过滤 script 里的注释?

代码是这样的:

输出是这样的:

https 后面的 //被截没了?

我之前见过这个标准库过滤<!---->的注释,这 js 里的注释也会处理掉?还处理错了位置?

我肯定是跟这个库有什么误会。。。


更多关于Golang Go语言中 html/template 过滤 script 里的注释?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html

16 回复

发个最小 Demo 的 Code 上来看看?

更多关于Golang Go语言中 html/template 过滤 script 里的注释?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


有点想笑。。

试着//转一下?

按理说不应该的,上个 demo+1

我的经验是, 当怀疑语言本身 /标准库 /操作系统 /计算机有 BUG 的时候, 99.9% 是自己的代码有 BUG…

为啥要在 html 里直接写 js。
html 和 js 视乎是分开处理。

字符串转义

https://play.golang.org/p/2F-FbNXWSko 根本就不会。

几行代码就能验证的事情。你的判断是错误的。

不过字符串外面的注释确实会过滤掉,可能旧版本有 bug 也不奇怪,升级到 1.14 试试

#1
#4 Code 上了

#3 输出结果变成 https://api.ip.sb/geoip 也不是预期

#6 确实昨晚上分成两个文件规避了,但是这个现象依旧很困惑

你给出的 demo 无法复现

url 编码一下

你引入的 cdn 有没有被修改掉?

直接调用 html/template 无法复现

你给出的 demo 无法复现

在Go语言的html/template包中,直接过滤HTML内容中的JavaScript注释并不是其设计的主要功能。html/template主要用于安全地生成HTML内容,防止XSS攻击,它通过自动转义HTML特殊字符来确保输出内容是安全的。

然而,如果你需要处理特定的JavaScript代码,并希望去除其中的注释,这通常需要在服务器端进行预处理,而不是在模板渲染阶段。以下是一个简单的思路:

  1. 预处理JavaScript代码:在将数据传递给模板之前,使用正则表达式或专门的JavaScript解析库(如goquery结合jsdom等,尽管这些库主要用于Node.js,Go中可能需要类似功能的第三方库或自行实现)来去除JavaScript代码中的注释。

  2. 使用html/template安全渲染:在预处理完JavaScript代码后,将其作为安全的数据传递给模板进行渲染。html/template会确保渲染的HTML内容不会包含未转义的JavaScript代码,从而防止XSS攻击。

需要注意的是,直接处理JavaScript代码(特别是去除注释)可能会引入复杂性,特别是当遇到多行注释、字符串中的类似注释的字符序列等情况时。因此,确保你的预处理逻辑能够正确处理这些边缘情况是非常重要的。

总之,虽然html/template本身不提供直接去除JavaScript注释的功能,但你可以通过预处理数据来实现这一需求,同时确保最终的HTML输出是安全的。

回到顶部