PHP: 使用chr打印汉字

WBOY
リリース: 2016-06-06 20:40:50
オリジナル
1680 人が閲覧しました

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

関連ラベル:
php
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート