中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

golang json.Marshal 特殊html字符被轉義的解決方法

發布時間:2020-10-18 10:31:10 來源:腳本之家 閱讀:522 作者:李浩的life 欄目:編程語言

go語言提供了json的編解碼包,json字符串作為參數值傳輸時發現,json.Marshal生成json特殊字符<、>、&會被轉義。

type Test struct {
  Content   string
}
func main() {
  t := new(Test)
  t.Content = "http://www.baidu.com?id=123&test=1"
  jsonByte, _ := json.Marshal(t)
  fmt.Println(string(jsonByte))
}
{"Content":"http://www.baidu.com?id=123\u0026test=1"}
Process finished with exit code 0

GoDoc描述

String values encode as JSON strings coerced to valid UTF-8,

replacing invalid bytes with the Unicode replacement rune.

The angle brackets “<” and “>” are escaped to “\u003c” and “\u003e”

to keep some browsers from misinterpreting JSON output as HTML.

Ampersand “&” is also escaped to “\u0026” for the same reason.

This escaping can be disabled using an Encoder that had SetEscapeHTML(false) alled on it.

json.Marshal 默認 escapeHtml 為true,會轉義 <、>、&

func Marshal(v interface{}) ([]byte, error) {
  e := &encodeState{}
  err := e.marshal(v, encOpts{escapeHTML: true})
  if err != nil {
    return nil, err
  }
  return e.Bytes(), nil
}

解決方案

方法一:

content = strings.Replace(content, "\\u003c", "<", -1)
content = strings.Replace(content, "\\u003e", ">", -1)
content = strings.Replace(content, "\\u0026", "&", -1)

這種方式比較直接,硬性字符串替換。比較憨厚

方法二:

文檔中寫到This escaping can be disabled using an Encoder that had SetEscapeHTML(false) alled on it.

我們先創建一個buffer用于存儲json

創建一個jsonencoder

設置html編碼為false

type Test struct {
  Content   string
}
func main() {
  t := new(Test)
  t.Content = "http://www.baidu.com?id=123&test=1"
  bf := bytes.NewBuffer([]byte{})
  jsonEncoder := json.NewEncoder(bf)
  jsonEncoder.SetEscapeHTML(false)
  jsonEncoder.Encode(t)
  fmt.Println(bf.String())
}
{"Content":"http://www.baidu.com?id=123&test=1"}
Process finished with exit code 0

查看文檔和源碼還是解決問題的好方法。

以上這篇golang json.Marshal 特殊html字符被轉義的解決方法就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

阿克苏市| 英超| 河津市| 湖州市| 公主岭市| 铁力市| 阿拉尔市| 双桥区| 辽宁省| 宁明县| 鄂伦春自治旗| 开阳县| 威宁| 东丽区| 建瓯市| 遵义县| 陕西省| 张掖市| 神木县| 汉阴县| 汉沽区| 汾西县| 平泉县| 吉木萨尔县| 石柱| 大兴区| 普定县| 乐昌市| 南岸区| 宝山区| 霍城县| 石门县| 灵石县| 香格里拉县| 海口市| 临汾市| 内乡县| 贺兰县| 五台县| 北流市| 合阳县|