marshal

更新时间:2022-11-27 09:32:09 阅读: 评论:0


2022年11月27日发(作者:开合)

解决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小时内删除。

上一篇:assignable
下一篇:accommodating
标签:marshal
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图