Конфигурация PHP UTF-8 - PullRequest
4 голосов
/ 19 мая 2011

Я настраиваю свой сервер Apache / 2.2.17 с PHP 5.3.5.Моя цель - создать чистую конфигурацию, которая по умолчанию имеет тип содержимого UTF-8.

php.ini :

default_charset = "UTF-8"
default_mimetype = "application/xhtml+xml"

Я получаю:

Content-Type: application/xhtml+xml

но требуется:

Content-Type: application/xhtml+xml; charset=UTF-8

Все решения Apache по настройке (AddDefaultCharset UTF-8), похоже, не работают, и я перезапустил Apache после того, как отредактировал свой php.ini конфигурация.

PHP документация:

default_charset string
PHP всегда выводит кодировку символов по умолчанию в Content-type: заголовокЧтобы отключить отправку кодировки, просто установите ее как пустую.

Я изменил поле default_mimetype на text/html, и внезапно оно работает: Content-Type:text/html; charset=UTF-8.
При настройке default_mimetype обратно на application/xhtml+xml charset=UTF-8 не будет отправлено.Это без какой-либо конфигурации Apache.

PHP сломан или я что-то пропустил?

Ответы [ 4 ]

4 голосов
/ 19 мая 2011

Я думаю, вам нужно установить эти параметры в конфигурации apache, а не в PHP.Отредактируйте файл apache2.conf или .htaccess для своего проекта:

AddDefaultCharset utf-8
DefaultType application/xml
1 голос
/ 19 мая 2011

PHP этого не делает ... Однако вы можете использовать Apache для этого.

Предполагая, что выше, вы можете использовать

AddDefaultCharset utf-8
DefaultType application/xhtml+xml

Это должно появиться в вашем VirtualHost(или конфигурация сервера)

0 голосов
/ 19 мая 2011

Я включил модуль iconv и добавил в php.ini :

output_handler = ob_iconv_handler

Этот обработчик добавляет правильную кодировку символов для вывода в Content-Type вместо default_charset.

Тем не менее, вы должны установить default_mimetype, в противном случае он устанавливает Content-Type:;charset= кодировку символов .

0 голосов
/ 19 мая 2011

Помните, что если для mimetype установлено значение «application / xhtml + xml», более старые версии Internet Explorer не будут отображать страницу, а отображать диалоговое окно сохранения.

Чтобы обойти это, вы можете установитьmimetype в "text / html", но это недопустимо в XHTML 1.1

. Вы также можете использовать согласование содержимого для решения проблемы.

Подробнее здесь: http://www.webstandards.org/learn/articles/askw3c/sep2003/

Если это вариант, я бы запустил «text / html» и использовал тип документа HTML5 <!DOCTYPE html>.Таким образом, вы все еще можете использовать синтаксис XHTML и быть действительным HTML5 (хотя, конечно, технически не допустимым XHTML ...)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...