我正在加载一个包含换行符的文本文件,并将其传递给html/templates
。
用替换为已加载的字符串中的\n
with <br>
,它们会被模板转义为html <br>
并显示在浏览器中,而不是引起换行。
如何更改此行为而无需切换到text/templates
(没有XSS保护)?
看来您可以先在文本上运行template.HTMLEscape()进行净化,然后执行\ n
替换所信任的内容,然后将其用作预先转义和信任的模板数据。
更新:在Kocka的示例上扩展,这是我想到的:
package main
import (
"html/template"
"os"
"strings"
)
const page = `<!DOCTYPE html>
<html>
<head>
</head>
<body>
<p>{{.}}</p>
</body>
</html>`
const text = `first line
<script>dangerous</script>
last line`
func main() {
t := template.Must(template.New("page").Parse(page))
safe := template.HTMLEscapeString(text)
safe = strings.Replace(safe, "\n", "<br>", -1)
t.Execute(os.Stdout, template.HTML(safe)) // template.HTML encapsulates a known safe HTML document fragment.
}
http://play.golang.org/p/JiH0uD5Zh2
输出为
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<p>first line<br><script>dangerous</script><br>last line</p>
</body>
</html>
在浏览器中呈现的文本是
first line
<script>dangerous</script>
last line
有没有办法做到这一点?
这是我的密码 我想替换字体标签,并把span标签。在这将取代第一个字体标签但不是第二个标签
问题内容: 我刚刚完成了从数据库中剥离HTML实体的任务,因为我们进行了很多爬网,并且某些爬网程序在输入时没有这样做:( 因此,我开始编写一堆看起来像这样的查询; 显然,这是一种非常幼稚的方法。我一直在尝试找出解码功能是否可以做些聪明的事情。也许通过正则表达式抓住HTML实体一样,然后通过 刚刚 的部分到ASCII解码器,以及重建串…或东西… 我可以按查询继续吗?其中可能只有40个左右。 问题答案
All linebreaks will be converted to <br /> tags in the given variable. This is equivalent to the PHP nl2br() function. 所有的换行符将被替换成 <br />.功能同PHP中的nl2br()函数一样. Example 5-14. nl2br 例 5-14.换行符替换成<br /> i
问题内容: 尝试简单地替换一些新行。尝试了3种不同的方法,但我没有任何改变: 这些都应该起作用,但是我仍然可以换行。它们是双精度的:“ \ r \ r”。那不应该让这些失败吗? 问题答案: 已经有在换行符之前 替换 插入* 标签的[]功能: ~~~~* 示例(键盘): 但是,如果仍然无法正常工作,请确保文本被双引号引起来。 那是因为单引号不会“扩展”转义序列,例如与双引号字符串相比。引用PHP文档
如何替换所有标签