设置json序列化不转义
func JSONMarshal(t interface{}) ([]byte, error) {
buffer := &bytes.Buffer{}
encoder := json.NewEncoder(buffer)
encoder.SetEscapeHTML(false)
err := encoder.Encode(t)
return buffer.Bytes(), err
}
强制替换\u0026
func TransHtmlJson(data []byte) []byte {
data = bytes.Replace(data, []byte("\\u0026"), []byte("&"), -1)
data = bytes.Replace(data, []byte("\\u003c"), []byte("<"), -1)
data = bytes.Replace(data, []byte("\\u003e"), []byte(">"), -1)
return data
}
curl命令不会对\u0026转义
$ curl -s "http://127.0.0.1:8090/test"
["http://www.baidu.com?a=1\u0026b=2"]
浏览器json插件会转义
[ "http://www.baidu.com?a=1&b=2" ]
postman不会转义
["http://www.baidu.com?a=1\u0026b=2"]
若要在Marshal之后手动转义,必须Marshal一次,TransHtmlJson一次。
TransHtmlJson只适用于 \u0026 替换,不适用于 \\u0026 或 \\\u0026 等形式。
例如
["http://www.baidu.com?a=1\u0026b=2"]
执行TransHtmlJson后得到 ["http://www.baidu.com?a=1&b=2"]
正确
["[\"http://www.baidu.com?a=1\\u0026b=2\"]"]
执行TransHtmlJson后得到 ["[\"http://www.baidu.com?a=1\&b=2\"]"]
错误, &符号前面多了一个\