go处理html特殊字符

总的来说有三种情况
一.对于特殊字符例如&,+等,url在传递参数的时候,会把+当作空格,&当作参数连接符,因此传递之前应该用%2B,%26分别表示+和&,后端解析如下:

func main() {
	vs, _:= url.ParseQuery(`source=%2B&title=%26`)
	fmt.Println(vs)
}
结果:map[v1:[+] v2:[&]]

ParseQuery将url中用&连接的参数解析成map,并且将转义后的特殊字符还原

二.后端将url中的转义后的特殊字符还原回来操作之后,继续转义之后传递给下游时有两种方式

fmt.Println("+:"+url.QueryEscape("+")+" &:"+url.QueryEscape("&"))
结果:+:%2B &:%26
u:=url.Values{}
u.Set("key1","&")
u.Set("key2","+")
fmt.Println(u.Encode())
结果:key1=%26&key2=%2B

三.我们用json.Marshal生成json,特殊字符<、>、&会被转义,解决方案如下:

func main() {
	type Test struct {
		Value     string
	}
	t := new(Test)
	t.Value = "http://www.baidu.com?v1=<&v2=1>"
	bf := bytes.NewBuffer([]byte{})
	jsonEncoder := json.NewEncoder(bf)
	jsonEncoder.SetEscapeHTML(false)
	jsonEncoder.Encode(t)
	fmt.Println(bf.String())
}
结果:{"Value":"http://www.baidu.com?v1=<&v2=1>"}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值