Установить HTTP-заголовок в UTF-8 с помощью PHP

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

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

Однако, когда я проверяю использование валидатора W3C, он приходит с:

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

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

Ответ 1

Используйте header, чтобы изменить заголовок HTTP:

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

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

Ответ 2

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

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

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

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

Ответ 3

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

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

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

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

Ответ 4

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

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

См. RFC 2616. Допустимо указывать только набор символов.

Ответ 5

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

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

mysql_query("SET NAMES utf8");

// Meta tag HTML (probably it 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

Ответ 6

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

ini_set('default_charset', 'utf-8');