首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有人理解这个PHP函数,为什么它只能输出中文字符?

问有没有人理解这个PHP函数,为什么它只能输出中文字符?
EN

Stack Overflow用户
提问于 2010-10-19 16:33:40
回答 2查看 152关注 0票数 2
代码语言:javascript
复制
function getChnRandChar($length) {
    mt_srand((double)microtime() * 1000000);
    $hanzi = '';
    for ($i = 0; $i < $length; $i++) {
        $number = mt_rand(16, 56) * 100 + mt_rand(1, 19);
        $tmpHanzi = chr(mb_substr($number, 0, 2) + 160);
        $tmpHanzi .= chr(mb_substr($number, 2, 2) + 160);
        $hanzi .= mb_convert_encoding($tmpHanzi, 'utf8', 'gb2312');
    }
    return $hanzi;
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-10-19 16:41:47

它首先生成一个随机的GB2312字符,然后将其转换为UTF8。

它生成的字符位于94x94网格的第16到56行和第1到19列,因此它只包括一小部分中文字符,并且排除了GB2312字符集中的所有非中文字符。

它首先生成1601-1619、1701-1719、... 5601-5619范围内的随机数,这些都是GB2312码点。然后,for循环的第二行和第三行将代码点编码为a two-byte EUC-CN sequence

将代码点映射到字节,将160 (0xA0)与代码点的1000和100的值相加以形成高字节,并将160 (0xA0)与代码点的10和1的值相加以形成低字节。

最后一行将2字节EUC-CN编码字符转换为UTF-8字符。

票数 4
EN

Stack Overflow用户

发布于 2010-10-19 16:37:35

因为字符编码是GB2312。

GB2312是中华人民共和国主要官方字符集的注册互联网名称,用于简体中文字符。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3966543

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档