PHP 获取 QQ群 bkn 参数

由于项目需求,需要获得 QQ 群成员的信息,所以便使用 Google 找到了这个开源项目:

GitHub 项目地址:https://github.com/nasaplayer/getCurrentQQGroupList

由于我只需要 bkn 的计算代码,所以我就提取出来了

这个计算方法的位置在:https://github.com/nasaplayer/getCurrentQQGroupList/blob/master/v3/getCurrentQQ.class.php
第 177 行
<?php

$skey = '@ziDp00luu';//这个 skey 总知道获取吧,不再累述
echo getBkn($skey);//正常的话,输出的是:500891986

//计算 bkn
function getBkn($skey) {
    $hash = 5381;
    for ($i = 0, $len = strlen($skey); $i < $len; ++$i){
        $hash +=($hash << 5) + charCodeAt($skey, $i);

    }
    return $hash & 2147483647;
}

function charCodeAt($str, $index){
    $char = mb_substr($str, $index, 1, 'UTF-8');
    $value = null;
    if (mb_check_encoding($char, 'UTF-8')){
        $ret = mb_convert_encoding($char, 'UTF-32BE', 'UTF-8');
        $value = hexdec(bin2hex($ret));
    }
    return $value;
}

JavaScript 获取地址栏 URL 相关信息汇总

下面以这个 URL 为例:

https://nowtime.cc/index.php?user=admin&passwd=admin

1. window.location.href 获取整个 URL 为字符串

$href = window.location.href;

console.log($href);//控制台 输出 https://nowtime.cc/index.php?user=admin&passwd=admin
alert($href);//返回 https://nowtime.cc/index.php?user=admin&passwd=admin

2. window.location.protocol 获取 URL 的协议部分

$protocol = window.location.protocol;

console.log($protocol );//控制台 输出 https:
alert($protocol );//返回 https:

3. window.location.host 获取 URL 的主机名部分

$host = window.location.host;

console.log($host);//控制台 输出 nowtime.cc
alert($host);//返回 nowtime.cc

4. window.location.port 取与 URL 关联的端口号码

$port = window.location.port;

console.log($port);
alert($port);

//返回:空字符(如果采用默认的80端口、添加了 :80),那么返回值并不是默认的80而是空字符)

5. window.location.pathname 获取与 URL 的路径部分

$pathname = window.location.pathname;

console.log($pathname);//控制台 输出 index.php
alert($pathname);//返回 index.php

6. window.location.search 获取 href 属性中跟在问号后面的部分

$search = window.location.search;

console.log($search);//控制台 输出 ?user=admin&passwd=admin
alert($search);//返回 ?user=admin&passwd=admin

7. window.location.hash 获取 href 属性中在井号“#”后面的部分

$hash = window.location.hash;

console.log($hash);
alert($hash);

//返回:空字符串,因为 URL 中没有

PHP 中文域名转码/编码 | 将 Unicode 域名转换为 IDNA ASCII 兼容格式

首先需要安装 Intl 扩展

  1. 如果你服务器装了宝塔面板,相应的 PHP 版本中,安装扩展(不会的自己百度
  2. 如果不是,请自己 Google、Bing、Bing 吧

使用

  1. 对域名编码 | 将 Unicode 域名转换为 IDNA ASCII 兼容格式

    <?php
    //如果你的 PHP版本 大于等于 7.2,必须用这个
    //因为我懒得在 PHP版本 小于 7.2 测试,所以不知道可不可行,行的话用这个
    echo idn_to_ascii('人民网.中国',IDNA_NONTRANSITIONAL_TO_ASCII,INTL_IDNA_VARIANT_UTS46);
    //输出结果:xn--gmq282eogn.xn--fiqs8s
    
    //如果你的 PHP版本 小于 7.1 用这个
    //PHP 大于等于 7.2 不要用这个!详情看:https://nowtime.cc/php/505.html
    echo idn_to_ascii('人民网.中国');
    //输出结果:xn--gmq282eogn.xn--fiqs8s
  2. 对域名解码 | 将 IDNA ASCII 兼容格式域名 转换为 Unicode 格式域名

    <?php
    //如果你的 PHP版本 大于等于 7.2,必须用这个
    //因为我懒得在 PHP版本 小于 7.2 测试,所以不知道可不可行,行的话用这个
    echo idn_to_utf8('xn--gmq282eogn.xn--fiqs8s',IDNA_NONTRANSITIONAL_TO_ASCII,INTL_IDNA_VARIANT_UTS46);
    //输出结果:人民网.中国
    
    //如果你的 PHP版本 小于 7.1 用这个
    //PHP 大于等于 7.2 不要用这个!详情看:https://nowtime.cc/php/505.html
    echo idn_to_utf8('xn--gmq282eogn.xn--fiqs8s');
    //输出结果:人民网.中国

PHP 报错:idn_to_ascii(): INTL_IDNA_VARIANT_2003 is deprecated

由于项目的需要,需要对中文域名转码(将 Unicode 域名转换为 IDNA ASCII 兼容格式),Google 查到使用 idn_to_ascii 函数可对中文域名(Unicode 域名)转换为 IDNA ASCII 兼容格式

我在 PHP 7.2.1 下运行 echo idn_to_ascii('人民网.中国'); 出现了一下错误

[root@izwz9a76txemslg5q0e3zaz ~]# php -v
PHP 7.2.11 (cli) (built: Nov  2 2018 09:15:43) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologie

[root@izwz9a76txemslg5q0e3zaz ~]# php -r "echo idn_to_ascii('人民网.中国');"
PHP Deprecated:  idn_to_ascii(): INTL_IDNA_VARIANT_2003 is deprecated in Command line code on line 1

Deprecated: idn_to_ascii(): INTL_IDNA_VARIANT_2003 is deprecated in Command line code on line 1

- 阅读剩余部分 -

PHP 判断是否为域名|判断是否为正确格式的域名

PHP 判断是否为域名|判断是否为正确格式的域名

!!!注意这代码判断的是域名,不是 URL!!!

因为项目有需求,首先想到去 Google 搜,翻了几页,未找到能满足自己需求的代码,所以自己动手造了个轮子

要想判断一个域名格式是否正确,得先知道域名是由哪些字符串组成的

Google 查阅了一些资料,得出一下要求

PS:在下述中,“域名” 所指的是,如 nowtime.cc 中的 nowtime

  1. “域名” 只能由 大小写字母数字- 组成
  2. “域名” 不能以 - 开头或结尾
  3. “域名” 每段长度最小 1 位,最长 63 位(不包含 “域名后缀”,以 . 分段)
  4. “域名总长度” 不能超过 255 位(不包含域名后缀;不包含 .

知道要求后,就可以开始造轮子了,然后就有了以下代码:(注意这代码判断的是域名,不是 URL)

- 阅读剩余部分 -