解决l()将HTML字符串转义的问题
解决l()将HTML字符串转义的问题
⽂章⽬录
#阅读本⽂,你将了解
#l()实现
#字符串被转义的解决⽅案
0.前⾔
最近在做项⽬的时候遇到⼀个问题,做MQTT设备鉴权是,有⼀个token算法,⽽这个token算法将会输出⼀个嵌套有&、/的HTML字符
串。我在采⽤n()打印输出,发现上述特殊字符并没有被转义,但当我通过l()json序列化输出到⽂件中时,发现特殊字
符被转义了,便有了本⽂。本⽂仅记录该问题定位和解决思路。
1.问题发现
在将设备devicestruct结构体进⾏token算法计算之后,通过json序列化写⼊⽂件中时,发现部分字符串被转义了。
typeDevicesstruct{
Idint`json:"id"`
ApiKeystring`json:"apiKey"`
AuthTokenstring`json:"auth_token"`
}
funcmain(){
varoutDevices[]Devices
//todo封装device相关的token信息
n("outDevices:",outDevices)
bytes,err:=l(outDevices)
iferr!=nil{
("jsonmarshalisfail%+v",err)
}
WriteFile(bytes)//输出到⽂件中
}
未被序列化的输出-->outDevices:[{10022143OTlmZWUyN2E0NTY5ZTZhNGE3YjQ=version=2020-12-16&res=products%2F102425%2Fdevices%2F1002
2143&et=1908125107&method=sha1&sign=O6Ba%2FG%2BTj0JPq3o9i5A8vw4iPIA%3D}]
通过查看输出的⽂件内容,发现&被转义为了u0026,如下图:
2.问题分析
1.怀疑l()序列化,将&被转义了;
ile()将json序列化之后的[]byte转义了。
打印输出l()之后的[]byte数组,发现&被转义为了u0026.
l:[{"id":10022143,"apiKey":"OTlmZWUyN2E0NTY5ZTZhNGE3YjQ=","auth_token":"version=2020-12-16u0026res=products%2F102425%2Fde
vices%2F10022143u0026et=1908125107u0026method=sha1u0026sign=O6Ba%2FG%2BTj0JPq3o9i5A8vw4iPIA%3D"}]
//结合上⽂,这⾥可以看见`&`被转义成了`u0026`
查看l()源码,在注解上找到了线索。
google翻译⼀下:
字符串值编码为强制转换为有效UTF-8的JSON字符串,⽤Unicode替换符⽂替换⽆效字节。
这样就可以安全地将JSON嵌⼊HTML
本文发布于:2022-11-27 09:32:09,感谢您对本站的认可!
本文链接:http://www.wtabcd.cn/fanwen/fan/90/30190.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |