在PHP 5.4设置中,我在PHP.ini中有这些设置:
zend.multibyte = On
zend.script_encoding = UTF-16BE
zend.detect-unicode = 0
我试图让zend引擎以特定的编码来解释我的PHP脚本,例如UTF-16BE。这意味着以其他编码编码的脚本应该失败。 我不希望zend引擎做任何猜测,无论是否存在像BOM标记这样的字节序列。
这是我的脚本index.php:
<?php echo '1';
该文件总共32个字节,使用UTF-16 LE 保存:
FF FE // BOM
3C 00 3F 00 70 00 68 00 70 00 20 00 // <?php
65 00 63 00 68 00 6F 00 20 00 // echo
27 00 31 00 27 00 // '1'
3B 00 // ;
脚本应该失败,因为提供的编码不是UTF-16BE。但是,输出为1
,证明引擎正在根据提供的字节进行编码猜测。
当我们使用带有BOM的UTF-8保存文件时,输出也是1
:
EF BB BF // BOM
3C 3F 70 68 70 20 // <?php
65 63 68 6F 20 // echo
27 31 27 // '1'
3B // ;
为什么zend.detect-unicode
无法正常工作?
更重要的是,我们如何配置引擎以尊重zend.script_encoding
中提供的编码?