html - 你如何在 Go 中转义原始 HTML?

标签 html go escaping

我已经设法使用以下行输出文本:

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>
&lt;p&gt;some text&lt;/p&gt;

另请注意,如果您只想转义某些 HTML 代码,则可以使用 template.HTMLEscaper()功能:

fmt.Println(template.HTMLEscaper(text))

输出:

&lt;p&gt;some text&lt;/p&gt;

关于html - 你如何在 Go 中转义原始 HTML?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31177428/

相关文章:

html - 使用 JSP 上的链接提交表单

javascript - 突出显示 HTML Select 标记中的值

linux - 如何打包 Go 程序使其自给自足?

html - 去动态删除 HTML onClick

go - Go 中项目的 Ebuild 示例

php - 如何只转义单引号?

javascript - Html-Javascript 表单验证不起作用

html - 带有内联 coffeescript 的 sublime 文本 html 文件

perl - 在 Perl 中将数据打印为 hexdump

asp.net - 如何让asp.net不自动转义URL中的转义正斜杠?