golang處理json轉義符 \u0026

設置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\"]"]

錯誤, &符號前面多了一個\

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章