考虑以下代码片段:
包主</p> <p>导入(</p> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">"encoding/json" "fmt" "log" "net/http"
)
func testFunc(w http.ResponseWriter, r *http.Request) {
data := make(map[string]string) data["key"] = "&" bytes, err := json.Marshal(data) if err != nil { fmt.Fprintln(w, "generator json error") } else { //print console fmt.Println(string(bytes)) fmt.Println("&") //print broswer fmt.Fprintln(w, string(bytes)) fmt.Fprintln(w, "&") }
}
func main () {
http.HandleFunc("/", testFunc) err := http.ListenAndServe(":9090", nil) if err != nil { log.Fatal("ListenAndServe", err) }
}
执行此代码后,我们注意到与符号 ('&') 被转换为 &在浏览器和控制台输出中,尽管其预期显示为“&”。
在 Go 1.7 中,引入了一个新选项来解决此问题:
func (*Encoder) SetEscapeHTML
此函数允许我们禁用 HTML 实体的转义,包括 '&'、''。
为了在示例代码中实现此解决方案,我们将 testFunc 函数修改如下:
func testFunc(w http.ResponseWriter, r *http.要求) {<pre class="brush:php;toolbar:false">... enc := json.NewEncoder(w) enc.SetEscapeHTML(false) ...
}
通过禁用编码器的 HTML 转义,我们确保 & 符号在 JSON 输出中保留为 '&',在浏览器和控制台中都可以。
以上是如何阻止 Go 的 JSON 封送拆收器将 '&' 转换为 '&'?的详细内容。更多信息请关注PHP中文网其他相关文章!