• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    golang json.Marshal 特殊html字符被转义的解决方法

    go语言提供了json的编解码包,json字符串作为参数值传输时发现,json.Marshal生成json特殊字符、>、会被转义。

    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 默认 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=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字符被转义的解决方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

    您可能感兴趣的文章:
    • golang语言如何将interface转为int, string,slice,struct等类型
    • golang如何使用struct的tag属性的详细介绍
    • Golang 如何解析和生成json
    • golang使用json格式实现增删查改的实现示例
    • golang 实现struct、json、map互相转化
    上一篇:Go 结构体、数组、字典和 json 字符串的相互转换方法
    下一篇:golang日志框架之logrus的使用
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    golang json.Marshal 特殊html字符被转义的解决方法 golang,json.Marshal,特殊,html,