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

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

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

下面是常规的QQ头像办法

  1. //获取Gravatar头像 QQ邮箱取用qq头像
  2. function getGravatar($email, $s = 96, $d = 'mp', $r = 'g', $img = false, $atts = array())
  3. {
  4. preg_match_all('/((\d)*)@qq.com/', $email, $vai);
  5. if (empty($vai['1']['0'])) {
  6. $url = 'https://www.gravatar.com/avatar/';
  7. $url .= md5(strtolower(trim($email)));
  8. $url .= "?s=$s&d=$d&r=$r";
  9. if ($img) {
  10. $url = '<img src="' . $url . '"';
  11. foreach ($atts as $key => $val)
  12. $url .= ' ' . $key . '="' . $val . '"';
  13. $url .= ' />';
  14. }
  15. }else{
  16. $url = 'https://q2.qlogo.cn/headimg_dl?dst_uin='.$vai['1']['0'].'&spec=100';
  17. }
  18. return $url;
  19. }

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

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

  1. //获取Gravatar头像 QQ邮箱取用qq头像
  2. function getGravatar($email, $s = 96, $d = 'mp', $r = 'g', $img = false, $atts = array())
  3. {
  4. preg_match_all('/((\d)*)@qq.com/', $email, $vai);
  5. if (empty($vai['1']['0'])) {
  6. $url = 'https://www.gravatar.com/avatar/';
  7. $url .= md5(strtolower(trim($email)));
  8. $url .= "?s=$s&d=$d&r=$r";
  9. if ($img) {
  10. $url = '<img src="' . $url . '"';
  11. foreach ($atts as $key => $val)
  12. $url .= ' ' . $key . '="' . $val . '"';
  13. $url .= ' />';
  14. }
  15. }else{
  16. $qquser = $vai['1']['0'];
  17. $geturl = 'http://ptlogin2.qq.com/getface?&imgtype=1&uin='.$qquser;
  18. $qqurl = file_get_contents($geturl);
  19. $str1 = explode('sdk&k=', $qqurl);
  20. $str2 = explode('&t=', $str1[1]);
  21. $k = $str2[0];
  22. $url = 'https://q1.qlogo.cn/g?b=qq&k='.$k.'&s=100';
  23. }
  24. return $url;
  25. }

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

第二种方法:

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

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

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

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

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

发表评论

已有 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慢一秒。

!