前言
一个埋点的域名,接收前端传过来的数据解析入库,本来设计为get方式,可后来觉得get方式不太安全,就采用了post+json的方式。
遇到的问题
问题1:接收到的json不能直接通过JSON.parseObject()转换成对象:
比如我上传的json:
|
NG打印的请求日志如下:
|
通过对比我们发现,NG把\n转换成了\x0A,把"转换成了\x22,如果仅仅是这的话,那么处理起来就很简单,直接使用字符串的替换方法把这两个字符替换掉即可
问题2:如果json里面有中文,情况就变的又不一样了,
比如我上传的json如下:
|
NG打印的请求日志如下:
|
为什么会变成这样呢?
我们来看看NG是如何写日志的?ngx_http_log_escape 函数拿到用户传过来的字符串,按照一个字节一个字节处理,遇到不是 ASCII 码表中的字符,该字符的高4位和低4位分别转成两个16进制数(0123456789ABCDEF),并用 \x 开头表示。原来如此啊,既然这样,那么我们就根据NG的函数写一个反操作即可
如何解决?
|