設置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\"]"]
錯誤, &符號前面多了一個\