在使用 Go语言 开发Web应用时,我们经常需要将数据序列化为JSON格式。然而,你是否注意到 encoding/json 包默认会对某些特殊字符进行 HTML转义?这可能会导致前端接收到的数据包含不必要的转义字符(如 <、> 等),影响显示效果。
HTML转义是指将某些具有特殊含义的字符(如 <、>、&、"、')转换为对应的HTML实体,以防止XSS(跨站脚本攻击)等安全问题。例如:
< 转义为 <> 转义为 >& 转义为 &出于安全考虑,encoding/json 包在序列化字符串时,默认会对 <、>、&、U+2028 和 U+2029 这些字符进行转义。这是为了防止将JSON直接嵌入HTML页面时产生安全漏洞。
如果你确定你的JSON不会被直接嵌入HTML,或者你已经在其他层面做了安全处理,那么可以关闭HTML转义。方法是使用 json.Encoder 并调用其 SetEscapeHTML(false) 方法。
package mainimport ( "encoding/json" "fmt")type Message struct { Content string `json:"content"`}func main() { msg := Message{Content: "Hello World & Friends!"} data, _ := json.Marshal(msg) fmt.Println(string(data))} 输出结果:
{"content":"Hello \u003cb\u003eWorld\u003c/b\u003e \u0026 Friends!"} package mainimport ( "encoding/json" "os")type Message struct { Content string `json:"content"`}func main() { msg := Message{Content: "Hello World & Friends!"} encoder := json.NewEncoder(os.Stdout) encoder.SetEscapeHTML(false) // 关键:关闭HTML转义 encoder.Encode(msg)} 输出结果:
{"content":"Hello World & Friends!"} <script> 标签),请保留默认的HTML转义行为。通过本文,你已经了解了 Go语言 中 encoding/json 包对 HTML转义 的默认行为及其控制方法。合理使用 SetEscapeHTML(false) 可以让你的JSON输出更干净,但务必注意安全风险。掌握这些技巧,能让你在开发中更加得心应手!
关键词回顾:Go语言、JSON、HTML转义、encoding/json包。
本文由主机测评网于2025-12-13发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/2025126955.html