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

相关评论(0)
您是不是忘了说点什么?

友情提示:垃圾评论一律封号...

还没有评论,快来抢沙发吧!