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

PHP: 使用chr打印汉字

WBOY
Freigeben: 2016-06-06 20:40:50
Original
1729 Leute haben es durchsucht

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

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

虽然有其他方法,如:

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

但为什么代码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>
Nach dem Login kopieren
Nach dem Login kopieren

虽然有其他方法,如:

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

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

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

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

<code>PHP_FUNCTION(chr)
</code>
Nach dem Login kopieren

{
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>
Nach dem Login kopieren

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

Verwandte Etiketten:
php
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage