(新)typecho获取QQ头像,隐藏QQ号

最初想到获取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 = '<img src="' . $url . '"';
        foreach ($atts as $key => $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 = '<img src="' . $url . '"';
        foreach ($atts as $key => $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.'?';
    }
}

使用方法:<?php Authorimg($comments->mail); ?>

文章由官网发布,如若转载,请注明出处:https://www.veimoz.com/316
4 条评论
6.8k

发表评论

已有 4 条评论

  1. jclser     Win 7 /    FireFox
    2020-05-11 17:11

    :黑线: 这个会拖慢页面1秒左右的。

    1. EVAN CHUN     Win 10 /    Chrome
      2022-08-10 15:27

      @jclser

      https://cdn.v2ex.com/gravatar/avatar,之前我是使用这个显示头像的,但是现在不能用了,好奇怪

    2. 【管理员】Vv     Win 7 /    Chrome
      2020-05-11 17:22

      @jclser

      能接受~:笑眼:

      1. jclser     Win 7 /    FireFox
        2020-05-12 00:04

        @Vv

        :滑稽: 是一个Q慢一秒。

!