幸运蛋蛋pc开奖
今天小编就为大家分享一篇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=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)

这种方式比?#29616;?#25509;,硬性字符串替换。比较憨厚

方法二:

文档中写到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字符被转义的解决方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持爱安网。

最新资讯
B站高管解读三季度财报:对整体用户增长的数字乐观

B站高管解读三季度财

财报发布后,哔哩哔哩董事长兼CEO陈睿、副董事长兼首席
特斯拉美国一家充电站起火 引附近?#29992;?#25285;忧

特斯拉美国一家充电站

国当地时间周日时,特斯拉位于新泽西州Wawa门店的Superc
邬贺铨详解5G产?#25285;?秒下电?#23433;?#38750;核心应用

邬贺铨详解5G产?#25285;?秒

2019京东全球科技探索者大会今?#31449;?#34892;,中国工程院院士邬
二十五年后北冰洋或现无冰期

二十五年后北冰洋或现

很难想象北极没有海冰!但美国科学家的一项新研究发现,从
小米发布小爱同学3.0 可实现手机上连续对话

小米发布小爱同学3.0

在11月19日的小米开发者大会?#24076;?#23567;米推出小爱同学3.0,称
哈佛科学家开发抗衰老基因疗法,可以成"万能药"吗

哈佛科学家开发抗衰老

“五大受损,一个对策!”哈佛大学一支研究抗衰老的科研团
最新文章
对Golang import 导入包语法详解

对Golang import 导入

今天小编就为大家分享一篇对Golang import 导入包语法
golang解析html网页的方法

golang解析html网页的

今天小编就为大家分享一篇golang解析html网页的方法,具
golang 检查网络状态是否正常的方法

golang 检查网络状态

今天小编就为大家分享一篇golang 检查网络状态是否正
Go 实现百万WebSocket连接的方法示例

Go 实现百万WebSocket

这篇文章主要介绍了Go 实现百万WebSocket连接的方法示
go语言中linkname的用法

go语言中linkname的用

这篇文章主要介绍了go语言中linkname的用法,本文给点俺
golang http 连接超时和传输超时的例子

golang http 连接超时

今天小编就为大家分享一篇golang http 连接超时和传输
幸运蛋蛋pc开奖 3d必备投注技巧及方法 重庆幸运农场走势图一定牛 宁夏十一选五派奖 金沙棋牌游戏 股票融资债券融资 新疆十一选五推荐 325棋牌游戏安卓下载 爱彩人湖南幸运赛车 零点棋牌游戏平台 3d免费杀号软件