最初想到获取QQ头像地址就是下面这样,当随之而来的问题就是暴露了别人的QQ号码,这点对于保护他人隐私上来说不太好。

国内使用Gravatar的用户很少,所以很多邮箱根本没有注册Gravatar,所以也就没有头像,而国内主流的还是以QQ邮箱为主,今天主要记录将typecho的评论进行邮箱识别,QQ邮箱则调用QQ头像

下面是常规的QQ头像办法

//获取Gravatar头像 QQ邮箱取用qq头像
function getGravatar($email, $s = 96, $d = 'mp', $r = 'g', $img = false, $atts = array())
{
preg_match_all('/((\d)*)@qq.com/', $email, $vai);
if (empty($vai['1']['0'])) {
 $url = 'https://www.gravatar.com/avatar/';
 $url .= md5(strtolower(trim($email)));
 $url .= "?s=$s&d=$d&r=$r";
 if ($img) {
  $url = '(新)typecho获取QQ头像,隐藏QQ号 $val)
$url .= ' ' . $key . '="' . $val . '"';
  $url .= ' />';
 }
}else{
 $url = 'https://q2.qlogo.cn/headimg_dl?dst_uin='.$vai['1']['0'].'&spec=100';
}
return  $url;
}

这里是暴露QQ号的思路办法
https://qqdie.com/archives/get-qq-avatar-no-qq-number.html

不过现在规则改动过了,我这边改动一下,做个记录,方便修改

//获取Gravatar头像 QQ邮箱取用qq头像
function getGravatar($email, $s = 96, $d = 'mp', $r = 'g', $img = false, $atts = array())
{
preg_match_all('/((\d)*)@qq.com/', $email, $vai);
if (empty($vai['1']['0'])) {
 $url = 'https://www.gravatar.com/avatar/';
 $url .= md5(strtolower(trim($email)));
 $url .= "?s=$s&d=$d&r=$r";
 if ($img) {
  $url = '(新)typecho获取QQ头像,隐藏QQ号 $val)
$url .= ' ' . $key . '="' . $val . '"';
  $url .= ' />';
 }
}else{
  
$qquser = $vai['1']['0'];
$geturl = 'http://ptlogin2.qq.com/getface?&imgtype=1&uin='.$qquser;
$qqurl = file_get_contents($geturl);
$str1 = explode('sdk&k=', $qqurl);
$str2 = explode('&t=', $str1[1]);
$k = $str2[0];

$url = 'https://q1.qlogo.cn/g?b=qq&k='.$k.'&s=100';
 
}
return  $url;
}

主要是现在改为了sdk&k=,所以要获取到sdk&k=的值,然后代替qq号来显示

第二种方法:

参考:https://www.ruletree.club/archives/1566/

获取HTTP请求所发送的标头的数组,不用读入整个文件不会影响效率。不过似乎还是很影响效率,页面加载很慢

function Authorimg($email)
{
 $a='cdn.v2ex.com/gravatar';//gravatar头像源
 $b=str_replace('@qq.com','',$email);
 if(stristr($email,'@qq.com')&&is_numeric($b)&&strlen($b)<11&&strlen($b)>4){
  $nk = 'https://s.p.qq.com/pub/get_face?img_type=3&uin='.$b;
  $c = get_headers($nk, true);
  $d = $c['Location'];
  $q = json_encode($d);
  $k = explode("&k=",$q)[1];
  echo 'https://q.qlogo.cn/g?b=qq&k='.$k.'&s=100';
 }else{
  $email= md5($email);
  echo 'https://'.$a.'/'.$email.'?';
 }
}

使用方法:mail); ?>

TAGS:QQ头像
!如链接失效请在下方留言。本站所有资源均来源于网络,版权属于原作者!仅供学习参考,本站不对您的使用负任何责任。如果有侵权之处请第一时间联系我们删除,敬请谅解!