Установить кодировку PHP по умолчанию в utf-8? - PullRequest
29 голосов
/ 19 февраля 2012

В «Поваренной книге 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 ]

42 голосов
/ 19 февраля 2012

Вам следует установить для default_charset значение UTF-8:

default_charset = "utf-8"

(PHP Cookbook может содержать опечатку, если вас попросят изменить default_encoding - я никогда не слышал оэто.)

Вы также должны убедиться, что ваш веб-сервер настроен на вывод UTF-8, если вы собираетесь выводить символы в кодировке UTF-8.В Apache это может быть установлено в файле httpd.conf:

AddDefaultCharset UTF-8

Что касается изменения настроек кодирования iconv, exif и mssql, вам, вероятно, не нужно устанавливатьони (ваши настройки в любом случае закомментированы), но в любом случае рекомендуется изменить их все на UTF-8.

7 голосов
/ 19 февраля 2012

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

;default_charset = "iso-8859-1"

, чтобы прочитать

default_charset = "utf-8"

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

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

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

4 голосов
/ 30 октября 2013

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

$dsn = 'mysql:host=localhost;dbname=retirodo_main;charset=utf8';
- - - - - - - - - - - - - - - - - - - - - - - - - ^^^^^^^^^^^^
0 голосов
/ 11 ноября 2017

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

0 голосов
/ 30 ноября 2016

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

CentOS

Изаиас Моура

0 голосов
/ 15 сентября 2013

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

...