我曾嘗試使用以下行管理輸出文本:如何在Go中轉換原始HTML?
fmt.Fprintf(w, "<p>some text</p>")
但這將字面上輸出HTML標籤。你如何輸出它,所以它可以安全地包含在HTML中,就像在PHP中使用echo
一樣?
我曾嘗試使用以下行管理輸出文本:如何在Go中轉換原始HTML?
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。因此你需要告訴瀏覽器它是html。
w.Header().Set("Content-Type", "text/html")
此功能只是將內容類型設置爲html。
go中的模板使用起來非常簡單,我甚至不會用任何其他方式輸出html。 – SBI
我正在嘗試創建一個web服務器 – matt
請看http://golang.org/pkg/html/template/ - 您應該將數據呈現給模板。模板/ html庫還負責安全地處理「用戶數據」以避免XSS。 http://jan.newmarch.name/go/template/chapter-template.html是學習軟件包的好的入門書。 – elithrar