前几天在写小猪比机器人,写一个新功能是网页上让机器人发送消息。我的实现原理是这样的:

输入要发的消息内容 => js储存cookie => PHP indexcontroller读取cookie => file_get_contents请求发送消息的API(发送消息的API是使用Python flask做的)

但是当我尝试发送中文消息的时候却变成了乱码,英文消息正常。
我推测可能是以下几个步骤出现了问题:
读取cookiefile_get_contents请求flask获取get参数

在我查看flask控制台输出后,初步排除了flask获取get参数出现问题的可能性。我又加了输出和编码格式输出,发现读取出的cookie也是正常的utf-8。所以bug就在file_get_contents请求这里。

我又先后试了curl等多种请求,结果也是一样。苦苦思索,突然想起来了在地址栏输入中文,会被encode成%XX%XX的格式。Google了一番,果然PHP有两个函数分别是urlencodeurldecode。前者可以将汉字转换为%XX%XX,后者相反。
使用urlencode再进行file_get_contents请求,发现可以正常发送中文消息了。