golang:JSON包在键和字符串值中转义了特殊的HTML字符

这是encoder包中的一段话 

// SetEscapeHTML specifies whether problematic HTML characters
// should be escaped inside JSON quoted strings.
// The default behavior is to escape &, <, and > to \u0026, \u003c, and \u003e
// to avoid certain safety problems that can arise when embedding JSON in HTML.
//
// In non-HTML settings where the escaping interferes with the readability
// of the output, SetEscapeHTML(false) disables this behavior.

// SetEscapeHTML指定是否有问题的HTML字符
//应该在JSON引用的字符串中转义。
//默认的行为是转义&、<和>到\u0026、\u003c和\u003e
//为了避免在HTML中嵌入JSON时可能出现的某些安全问题。
//
//在非html设置中,转义会影响可读性
//对于输出,SetEscapeHTML(false)禁用此行为。

大概意思是json编码时,字符含有  &, <, and >的会被编码成 \u0026, \u003c, and \u003e,这对用户来说不是很友好,目前在go 1.13版本仍有这个问题,下面是解决方案

package main

import (
	"bytes"
	"encoding/json"
	"fmt"
)

func main() {
	data := "x < y"

	raw,_ := json.Marshal(data)
	fmt.Println(string(raw))
	fmt.Printf("%s\n",raw)
	//prints: "x \u003c y" <- probably not what you expected

	var b1 bytes.Buffer
	json.NewEncoder(&b1).Encode(data)
	fmt.Println(b1.String())
	//prints: "x \u003c y" <- probably not what you expected

	var b2 bytes.Buffer
	enc := json.NewEncoder(&b2)
	enc.SetEscapeHTML(false)
	enc.Encode(data)
	fmt.Println(b2.String())
	//prints: "x < y" <- looks better
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值