簡體   English   中英

你如何在 Go 中轉義原始 HTML?

[英]How do you escape raw HTML in Go?

我設法使用以下行輸出文本:

fmt.Fprintf(w, "<p>some text</p>")

但這將逐字輸出 HTML 標簽。 您如何輸出它以便它可以像在 PHP 中使用echo一樣安全地包含在 HTML 中?

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;

這里的問題不是我使用的輸出方法。 Atchaully,瀏覽器將其視為純文本而不是 html。 因此,您需要告訴瀏覽器它是 html。

 w.Header().Set("Content-Type", "text/html")

此函數只是將內容類型設置為 html。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM