首页 > 后端开发 > Golang > 如何阻止 Go 的 JSON 封送拆收器将 \'&\' 转换为 \'&\'?

如何阻止 Go 的 JSON 封送拆收器将 \'&\' 转换为 \'&\'?

DDD
发布: 2024-12-01 13:09:11
原创
1042 人浏览过

How to Stop Go's JSON Marshaler from Converting '&' to '&'?

如何防止 JSON 将 '&' 转换为 '&'?

问题场景

考虑以下代码片段:

包主</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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门推荐
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板