Установка кодировки 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?

Author: YakovL, 2012-02-19

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.

 40
Author: Ben D, 2016-03-03 10:56:55

Измените строку

;default_charset = "iso-8859-1"

Для чтения

default_charset = "utf-8"

Что касается других вариантов, не трогайте их. Избегайте настроек по умолчанию, всегда явно устанавливайте кодировку во всем, что вы делаете

  • подключения к базе данных,
  • чтение и запись файлов,
  • преобразование с помощью iconv.

Кроме того, остерегайтесь кодировки, в которой сохранены ваши PHP-файлы, убедитесь, что они находятся в UTF-8, особенно если они содержат строки для отображения или сравнения.

 6
Author: gioele, 2012-11-06 15:43:33

У меня была проблема с моим запросом mysql, что он не распознает некоторые латинские обозначения, поэтому запрос завершится неудачей. Я думал, что это может быть файл php и так далее, пока не узнал, что с помощью pdo для вызова mysql мне пришлось добавить кодировку. Странно то, что предыдущий сервер, который я использовал, работал нормально!

$dsn = 'mysql:host=localhost;dbname=retirodo_main;charset=utf8';
- - - - - - - - - - - - - - - - - - - - - - - - - ^^^^^^^^^^^^
 3
Author: Miguel, 2017-09-05 09:28:13

Для решения я изменил "UTF-8" на "UTF-8" (без тире), вместо этого решив проблему.

Центос

Изайас Мура

 0
Author: user7232321, 2016-11-30 17:44:33

На уровне htaccess (файл.htaccess) директива php должна быть php_value default_charset UTF-8

 0
Author: ontananza, 2017-11-11 20:45:08

Изменение с *default_charset="utf-8"* на *default_charset= "iso-8859-1"* работает для меня (я использую веб-сервер Apache и ОС Linux). по некоторым причинам, когда я использую utf-8, некоторые символы отображаются плохо. Они либо меняются на какой-то квадратный знак, либо на знак вопроса в зависимости от используемого веб-браузера.

 -2
Author: Will, 2013-09-15 19:50:21