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;
}发布于 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字符。
发布于 2010-10-19 16:37:35
因为字符编码是GB2312。
GB2312是中华人民共和国主要官方字符集的注册互联网名称,用于简体中文字符。
https://stackoverflow.com/questions/3966543
复制相似问题