PHP: 使用chr打印汉字
ringa_lee
ringa_lee 2017-04-10 15:09:06
[PHP讨论组]

使用chr($i)可以顺利的打印出ASCII,但是,当$i>=19968(汉字的Unicode的起始值4E00的十进制)后,发现没法打印出汉字。
如:

<?php
    //代码1
    header('Content-Type: text/html; charset=utf-8');
    echo chr(19968);//汉字一的Unicode值:4E00
?>

虽然有其他方法,如:

//代码2
$character = html_entity_decode('&#x4e00;', ENT_QUOTES, 'UTF-8');

但为什么代码1没法打印出汉字?

ringa_lee
ringa_lee

ringa_lee

全部回复(1)
ringa_lee

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语言的字符强制转换。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号