Установите заголовок HTTP на UTF-8, используя PHP - PullRequest
300 голосов
/ 25 ноября 2010

У меня есть несколько PHP страниц, выводящих различные вещи на HTML страницы со следующим кодом.

<meta http-equiv="Content-type" content="text/html; charset=utf-8" />

Однако, когда я проверяю с помощью W3C-валидатора , он обнаруживает:

Кодировка символов, указанная в заголовке HTTP (iso-8859-1), отличается от значения в элементе (utf-8).

Я довольно новичок в PHP, и мне было интересно, могу ли я и должен ли изменить заголовок для файлов PHP, чтобы он соответствовал файлам HTML.

Ответы [ 6 ]

862 голосов
/ 25 ноября 2010

Используйте header для изменения заголовка HTTP:

header('Content-Type: text/html; charset=utf-8');

Примечание для вызова этой функции до того, как какой-либо вывод будет отправлен клиенту. В противном случае заголовок тоже был отправлен, и вы, очевидно, больше не сможете его изменить. Вы можете проверить это с помощью headers_sent. Для получения дополнительной информации см. Справочную страницу из header.

32 голосов
/ 25 ноября 2010

Сначала убедитесь, что сами PHP-файлы имеют кодировку UTF-8 .

В некоторых браузерах метатег игнорируется.Если вы используете только символы ASCII, это не имеет значения.

http://en.wikipedia.org/wiki/List_of_HTTP_header_fields

header('Content-Type: text/html; charset=utf-8');
15 голосов
/ 25 ноября 2010

Это проблема с вашим веб-сервером, отправляющим заголовок HTTP, который не совпадает с тем, который вы определили. Инструкции о том, как заставить сервер отправлять правильные заголовки, см. на этой странице .

В противном случае вы также можете использовать PHP для изменения заголовков, но это необходимо сделать до вывода любого текста с использованием этого кода:

header('Content-Type: text/html; charset=utf-8');

Дополнительную информацию о том, как отправлять заголовки с помощью PHP, можно найти в документации по функции заголовка .

11 голосов
/ 18 марта 2014

Вы также можете использовать более короткий путь:

<?php header('Content-Type: charset=utf-8'); ?>

См. RFC 2616 его можно указать только в кодировке.

8 голосов
/ 19 августа 2014

Для правильной реализации вам нужно изменить ряд вещей.

База данных. (Сразу после подключения):

mysql_query("SET NAMES utf8");
//Meta tag HTML.(probably its already set): 
meta charset="utf-8"
header php.(before any output of the HTML):
header('Content-Type: text/html; charset=utf-8')
table-rows-charset(for each row):
utf8_unicode_ci
5 голосов
/ 11 сентября 2017

PHP отправляет заголовки автоматически, если настроена внутренняя кодировка

ini_set('default_charset', 'utf-8');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...