客户反馈之前做的一个专题,有个用户报名数据没有正确写入。简单介绍下h5功能,类似报名功能,微信下授权后获取到openid、nichname,之后填写姓名并选择所在城市等信息,提交表单信息。其他用户填写都是正常的,通过用户反馈过来,用户昵称为“橙澄僜”。通过调试发现,这个昵称字符串转换为gbk编码后,再通过addslashes转义,字符串末尾会出现反斜线(\)。造成拼接的sql出现解析错误。
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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变量值设置为空。
友情提示:垃圾评论一律封号...