В настройке PHP 5.4 у меня есть эти настройки в моем PHP.ini:
zend.multibyte = On zend.script_encoding = UTF-16BE zend.detect-unicode = 0
Я пытаюсь заставить движок zend интерпретировать мои PHP-скрипты в определенной кодировке, например UTF-16BE. Это означает, что сценарии, закодированные в другой кодировке, должны завершиться ошибкой. Я не хочу, чтобы движок zend вообще делал какие-либо догадки , независимо от (в) существования байтовых последовательностей, таких как метки спецификации.
Это мой скрипт 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
, доказывая, что движок выполняет кодирование-угадывание на основе предоставленных байтов.
Выход также 1
когда мы сохраняем файл с использованием UTF-8 с спецификацией:
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
?