PHP: 使用chr打印汉字
程序员文章站
2022-05-23 18:59:48
...
使用
如:
chr($i)
可以顺利的打印出ASCII,但是,当$i>=19968(汉字的Unicode的起始值4E00的十进制)后,发现没法打印出汉字。如:
虽然有其他方法,如:
//代码2
$character = html_entity_decode('一', ENT_QUOTES, 'UTF-8');
但为什么代码1没法打印出汉字?
回复内容:
使用chr($i)
可以顺利的打印出ASCII,但是,当$i>=19968(汉字的Unicode的起始值4E00的十进制)后,发现没法打印出汉字。
如:
虽然有其他方法,如:
//代码2
$character = html_entity_decode('一', ENT_QUOTES, 'UTF-8');
但为什么代码1没法打印出汉字?
ASCII根本就不包含汉字,
包含汉字的是GB2312-80,GBK,Big5,unicode
汉字是多字节,你用ord就会发现,只会返还汉字的首字节。
其实chr函数的源代码就在 /ext/standard/string.c
代码如下
PHP_FUNCTION(chr)
{
long c;
char temp[2];
if (ZEND_NUM_ARGS() != 1) {
WRONG_PARAM_COUNT;
}
if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, "l", &c) == FAILURE) {
c = 0;
}
temp[0] = (char)c;
temp[1] = '\0';
RETURN_STRINGL(temp, 1, 1);
}
可以看到的是,就是C语言的字符强制转换。
上一篇: 网页使用curl_multi多线程后速度变得更慢了?该如何处理
下一篇: 求一段php正则替换规则