[英]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>
<p>some text</p>
另請注意,如果您只想轉義一些 HTML 代碼,則可以使用template.HTMLEscaper()
函數:
fmt.Println(template.HTMLEscaper(text))
輸出:
<p>some text</p>
這里的問題不是我使用的輸出方法。 Atchaully,瀏覽器將其視為純文本而不是 html。 因此,您需要告訴瀏覽器它是 html。
w.Header().Set("Content-Type", "text/html")
此函數只是將內容類型設置為 html。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.