客户反馈之前做的一个专题,有个用户报名数据没有正确写入。简单介绍下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变量值设置为空。
发表评论 取消回复