php技术博客

记录php相关学习知识及开发示例、疑难问题等

[原创] 分析一次写入微信昵称数据执行sql报错问题

客户反馈之前做的一个专题,有个用户报名数据没有正确写入。简单介绍下h5功能,类似报名功能,微信下授权后获取到openid、nichname,之后填写姓名并选择所在城市等信息,提交表单信息。其他用户填写都是正常的,通过用户反馈过来,用户昵称为“橙澄僜”。通过调试发现,这个昵称字符串转换为gbk编码后,再通过addslashes转义,字符串末尾会出现反斜线(\)。造成拼接的sql出现解析错误。

header("Content-Type:text/html;charset=gbk");
$ss='橙澄僜';
 
$ss2=iconv('utf-8','gbk//ignore',$ss);
$nickname=base64_encode($ss2);
 
var_dump($ss2,$nickname,base64_decode('s8izzoNc'));
$sql="insert into test (nickname,name) values ('$nickname','test')";
var_dump($sql);
//--输出结果
/*
string(6) "橙澄僜" string(8) "s8izzoNc" string(6) "橙澄僜" string(59) "insert into test (nickname,name) values ('s8izzoNc','test')"
*/

ps:文件编码为utf-8,数据库表test编码为gbk,所以要帮nickname转为gbk编码


解决方案:

1、数据库表改为utf8编码保存

2、nickname字段值先通过base64_encode编码下,调取时在通过base64_decode还原下

3、判断nickname转义后的字符串,如果末尾有反斜线的,帮nickname变量值设置为空。

版权声明:本站原创文章,转载请注明出处:php技术博客,否则将追究法律责任