Heim >Backend-Entwicklung >PHP-Tutorial >PHP: 使用chr打印汉字

PHP: 使用chr打印汉字

WBOY
WBOYOriginal
2016-06-06 20:40:501730Durchsuche

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

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

虽然有其他方法,如:

<code>//代码2
$character = html_entity_decode('一', ENT_QUOTES, 'UTF-8');
</code>

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

回复内容:

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

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

虽然有其他方法,如:

<code>//代码2
$character = html_entity_decode('一', ENT_QUOTES, 'UTF-8');
</code>

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

ASCII根本就不包含汉字,
包含汉字的是GB2312-80,GBK,Big5,unicode
汉字是多字节,你用ord就会发现,只会返还汉字的首字节。

其实chr函数的源代码就在 /ext/standard/string.c
代码如下

<code>PHP_FUNCTION(chr)
</code>

{
long c;
char temp[2];

<code>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);
</code>

}
可以看到的是,就是C语言的字符强制转换。

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:信息发布与队列使用问题Nächster Artikel:PHP String 转int的问题