刚刚注册的时候,在登录完qq 跳转到完善资料页面的时候,用户名显示乱码,
很是纳闷?怎么会会乱码呢?
qq api 说回传的utf-8 的编码,我的网站也是utf-8编码的呀。
看到代码部分:
*****phpcms/modules/member/index.php的function public_qq_loginnew()中*****
}else{
//未存在于数据库中,跳去完善资料页面。页面预置用户名(QQ返回是UTF8编码,如有需要进行转码)
$user = $info->get_user_info();
$_SESSION['connectid'] = $openid;
$_SESSION['from'] = 'qq';
if(CHARSET != 'utf-8') {//转编码
$connect_username = iconv('utf-8', CHARSET, $user['nickname']);
} else {
$connect_username = $user['nickname'];
}
include template('member', 'connect');
}
*****
感觉不对劲,界面上直接echo $users['nickname']; 也是乱码。
于是寻找到对应的静态页面phpcms/templates/default/member/connect.html
静态页面地址:
\phpcms_v9_UTF8\install_package\phpcms\templates\default\member\connect.html 的配置代码
*******
完善资料
{L('username')}:{$connect_username}
*******
原来是$connect_username 这个值会乱码。
回到刚刚的,index.php 文件,找到赋值的语句
$connect_username = $user['nickname'];
往上推到。
$user = $info->get_user_info();
在文件phpcms/modules/member/classes/qqapi.class.php
的方法
*******
/**
* 返回用户信息
*
*/
public function get_user_info(){
$url = "https://graph.qq.com/user/get_user_info?access_token=$this->access_token&oauth_consumer_key=$this->appid&openid=$this->openid";
$content=file_get_contents($url);
$result = json_decode($content);
return $result->nickname;
}
*******
原来这边已经赋值了nickname ,于是修改index.php文件的内容为
$user = $info->get_user_info();
$_SESSION['connectid'] = $openid;
$_SESSION['from'] = 'qq';
if(CHARSET != 'utf-8') {//转编码
$connect_username = iconv('utf-8', CHARSET, $user);
} else {
$connect_username = $user;
}
问题解决。(去除 ['nickname'])