PHP的行为有变化吗?

时间:2013-07-25 10:09:50

标签: php character-encoding php-5.3

在学习ZEND-CE考试时,我遇到了这个问题:

  

给出php.ini设置:
     default_charset = utf-8
  以下代码将在浏览器中打印什么?

<?php  

header('Content-Type: text/html; charset=iso-8859-1');  

echo '&#9986;&#10004;&#10013;';  

?>
     

一个。乱码数据
  B.&amp; #9986; &安培; #10004; &安培; #10013;
  C.由于字符集不匹配导致的空行

预期答案是C,我预计它是A - 当我运行该代码时,我得到了乱码数据(答案A)!所以我想知道最近是否更改了PHP的行为,或者这是否是测试中的错误?

1 个答案:

答案 0 :(得分:2)

我不知道PHP行为在这方面发生了变化。但是,HTML标准已经改变。

在HTML 4之前,数字字符引用(例如&#9986;)根据文档字符集(在内容类型标题字段中指定)进行解释。合理的是,由于ISO 8859-1中不存在代码点9986,因此不会打印任何内容。

从HTML 4开始,数字字符引用被解释为Unicode代码点。因此echo '&#9986;&#10004;&#10013;';应该打印✂✔✝,无论内容类型标题字段对字符集的描述如何。如果不熟悉Unicode Dingbats块,则调用✂✔✝ 乱码数据是合理的。