佳木斯湛栽影视文化发展公司

主頁 > 知識(shí)庫 > golang json.Marshal 特殊html字符被轉(zhuǎn)義的解決方法

golang json.Marshal 特殊html字符被轉(zhuǎn)義的解決方法

熱門標(biāo)簽:Linux服務(wù)器 AI電銷 地方門戶網(wǎng)站 服務(wù)外包 網(wǎng)站排名優(yōu)化 百度競(jìng)價(jià)排名 鐵路電話系統(tǒng) 呼叫中心市場(chǎng)需求

go語言提供了json的編解碼包,json字符串作為參數(shù)值傳輸時(shí)發(fā)現(xiàn),json.Marshal生成json特殊字符、>、會(huì)被轉(zhuǎn)義。

type Test struct {
  Content   string
}
func main() {
  t := new(Test)
  t.Content = "http://www.baidu.com?id=123test=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 默認(rèn) escapeHtml 為true,會(huì)轉(zhuǎn)義 、>、

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.

我們先創(chuàng)建一個(gè)buffer用于存儲(chǔ)json

創(chuàng)建一個(gè)jsonencoder

設(shè)置html編碼為false

type Test struct {
  Content   string
}
func main() {
  t := new(Test)
  t.Content = "http://www.baidu.com?id=123test=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=123test=1"}
Process finished with exit code 0

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

以上這篇golang json.Marshal 特殊html字符被轉(zhuǎn)義的解決方法就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

您可能感興趣的文章:
  • golang語言如何將interface轉(zhuǎn)為int, string,slice,struct等類型
  • golang如何使用struct的tag屬性的詳細(xì)介紹
  • Golang 如何解析和生成json
  • golang使用json格式實(shí)現(xiàn)增刪查改的實(shí)現(xiàn)示例
  • golang 實(shí)現(xiàn)struct、json、map互相轉(zhuǎn)化

標(biāo)簽:衡水 銅川 湖南 蘭州 仙桃 崇左 黃山 湘潭

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《golang json.Marshal 特殊html字符被轉(zhuǎn)義的解決方法》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    宜都市| 肃南| 措勤县| 中超| 恭城| 西和县| 灌南县| 商水县| 湖北省| 沅江市| 浦城县| 龙游县| 交城县| 安西县| 剑川县| 安顺市| 乐陵市| 鄂托克前旗| 南涧| 博罗县| 东乡族自治县| 固始县| 商洛市| 仙游县| 恩平市| 襄汾县| 黄浦区| 鹤壁市| 林芝县| 莱州市| 乐安县| 阿尔山市| 萨嘎县| 湖南省| 绥棱县| 金塔县| 化州市| 大理市| 旬邑县| 永济市| 新化县|