Установка кодировки PHP по умолчанию в utf-8?
В "Поваренной книге PHP" говорится (стр.589), что для правильной установки кодировки символов исходящих данных в utf-8 необходимо отредактировать конфигурацию default_encoding
в utf-8.
Однако я не могу найти эту конфигурацию в php.ini
. Должен ли я просто добавить строку, в которой говорилось бы default_encoding = "utf-8"
?
У меня есть ;default_charset = "iso-8859-1"
. Как вы можете видеть (;
), сейчас он не активирован. Должен ли я удалить точку с запятой и установить ее в "utf-8"
? Заботится ли это о кодировке по умолчанию?
Я также нашел другие директивы кодирования, с которыми я не знаю, что делать:
[iconv]
;iconv.input_encoding = ISO-8859-1
;iconv.internal_encoding = ISO-8859-1
;iconv.output_encoding = ISO-8859-1
...
; http://php.net/exif.encode-unicode
;exif.encode_unicode = ISO-8859-15
...
;mssql.charset = "ISO-8859-1"
...
;exif.encode_unicode = ISO-8859-15
Есть ли какая-то причина, по которой я не должен просто заменить их все на utf-8
?
6 answers
Вы должны установить свой default_charset
в UTF-8:
default_charset = "utf-8"
(В поваренной книге PHP может быть опечатка, если вас попросят изменить default_encoding
- я никогда об этом не слышал.)
Вы также захотите убедиться, что ваш веб-сервер настроен на вывод UTF-8, если вы собираетесь выводить символы в кодировке UTF-8. В Apache это можно задать в файле httpd.conf:
AddDefaultCharset UTF-8
Что касается изменения iconv
, exif
, и mssql
настройки кодирования, вам, вероятно, не нужно их устанавливать (в ваших настройках есть они все равно прокомментированы), но в любом случае было бы неплохо изменить их все на UTF-8.
Измените строку
;default_charset = "iso-8859-1"
Для чтения
default_charset = "utf-8"
Что касается других вариантов, не трогайте их. Избегайте настроек по умолчанию, всегда явно устанавливайте кодировку во всем, что вы делаете
- подключения к базе данных,
- чтение и запись файлов,
- преобразование с помощью iconv.
Кроме того, остерегайтесь кодировки, в которой сохранены ваши PHP-файлы, убедитесь, что они находятся в UTF-8, особенно если они содержат строки для отображения или сравнения.
У меня была проблема с моим запросом mysql, что он не распознает некоторые латинские обозначения, поэтому запрос завершится неудачей. Я думал, что это может быть файл php и так далее, пока не узнал, что с помощью pdo для вызова mysql мне пришлось добавить кодировку. Странно то, что предыдущий сервер, который я использовал, работал нормально!
$dsn = 'mysql:host=localhost;dbname=retirodo_main;charset=utf8';
- - - - - - - - - - - - - - - - - - - - - - - - - ^^^^^^^^^^^^
Для решения я изменил "UTF-8" на "UTF-8" (без тире), вместо этого решив проблему.
Центос
Изайас Мура
На уровне htaccess (файл.htaccess) директива php должна быть php_value default_charset UTF-8
Изменение с *default_charset="utf-8"* на *default_charset= "iso-8859-1"* работает для меня (я использую веб-сервер Apache и ОС Linux). по некоторым причинам, когда я использую utf-8, некоторые символы отображаются плохо. Они либо меняются на какой-то квадратный знак, либо на знак вопроса в зависимости от используемого веб-браузера.