我已经设法使用以下行输出文本:
fmt.Fprintf(w, "<p>some text</p>")
但这将逐字输出 HTML 标签。您如何输出它,以便它可以安全地包含在 HTML 中,就像在 PHP 中使用 echo
一样?
最佳答案
fmt.Fprintf()
不了解 HTML 语法:它输出原始数据而不对其进行转义(它可能会进行一些格式化,但不会转义)。
虽然你没有正确使用它:它的第二个参数是一个格式字符串,所以你应该这样调用它:
fmt.Fprintf(w, "%s", "<p>some text</p>")
否则,如果您的文本包含一些特定于格式的特殊字符,您将无法获得预期的结果。
您想要的是转义 HTML 代码,以便它可以安全地包含在 HTML 文档/页面中。为此,您可以从 html/template
获得出色的支持包,它为您提供了一个强大的模板引擎,其中自动转义功能只是一个功能。
这是一个如何实现您想要的简单示例:
w := os.Stdout
text := "<p>some text</p>"
fmt.Fprintf(w, "%s\n", text)
tt := `{{.}}`
t := template.Must(template.New("test").Parse(tt))
t.Execute(w, text)
输出(在 Go Playground 上尝试):
<p>some text</p>
<p>some text</p>
另请注意,如果您只想转义某些 HTML 代码,则可以使用 template.HTMLEscaper()
功能:
fmt.Println(template.HTMLEscaper(text))
输出:
<p>some text</p>
关于html - 你如何在 Go 中转义原始 HTML?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31177428/