我已设法使用以下行输出文本:
fmt.Fprintf(w, "<p>some text</p>")
但这会输出HTML标签。如何输出它,以便像在PHP中使用echo
一样安全地包含在HTML中?
答案 0 :(得分:3)
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>
答案 1 :(得分:1)
这里的问题不是我使用的输出方法。简而言之,浏览器将其视为纯文本而非html。因此,您需要告诉浏览器它是html。
w.Header().Set("Content-Type", "text/html")
此功能只是将内容类型设置为html。