精细结构

目录

坑爹的 querystring,坑爹的 %

写这篇文章的时候,为了这篇帖子: [C语言学习]之双重指针,搞得几天吃不下饭,睡不着觉。

最开始,什么都没想,把写好的帖子直接往发布面板一丢,一按键就发送出去了。
但发送之后,却发生了诡异的事情:出现了乱码!
字母不说,汉字全部变成 -�K� 这种乱码。没一个例外!

为什么说诡异,就是因为发布面板早就做好了,测试也测试了一段时间,包括从前台到后台,都确认过没有什么问题。而如果通过 SqliteDev 直接操作数据库,却可以将内容正确插入数据库,没有任何问题。
这就奇了怪了,为什么其他帖子都可以正常输入数据库,而到了这篇“[C语言学习]之双重指针”就死活插不了了呢?

百思不得其解。

于是开始排查问题所在,过二分法,点点缩小范围,确定原因。
最后调查出来,原因竟然只在一个该死的 % 上!

原因是我后台使用了 querystring 来解析通过 HTTP POST 上去的数据将字符串解析为 Nodejs 的对象。
但偏偏这货在解析对象的时候,用到了 decodeURIComponent 这函数,而 decodeURIComponent 这货在解析 % 的时候会崩掉,必须用 %25 来进行转义……

然后 querystring 这货用了 Buffer 这个我暂时没理解的东西去解析字符,最终导致了乱码。

原因找到了,解决问题的方法,自然也就有了。最简单的做法,就是在前台 POST 之前,先把需要提交的数据给 encodeURIComponent 一次,到了后台,也就可以让 decodeURIComponent 直接解析出来了事。

但这种时候,在前台,就需要事先对 % 这些需要转码的对象进行事先转码,不然还是会出错,这时候就显得略微蛋疼。
目前的处置方法就是这样,至于更人性化的解决方案,只能继续摸索了。

但 querystring 的乱码问题,继续研究研究,看看为什么……