Установите заголовок 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.
7 ответов
Использование header
изменить заголовок HTTP:
header('Content-Type: text/html; charset=utf-8');
Обратите внимание на вызов этой функции до того, как какой-либо вывод будет отправлен клиенту. В противном случае заголовок также был отправлен, и вы, очевидно, не сможете его изменить. Вы можете проверить это с headers_sent
, Смотрите страницу руководства header
для дополнительной информации.
Сначала убедитесь, что сами файлы PHP имеют кодировку UTF-8.
Метатег игнорируется некоторым браузером. Если вы используете только ASCII-символы, это все равно не имеет значения.
http://en.wikipedia.org/wiki/List_of_HTTP_header_fields
header('Content-Type: text/html; charset=utf-8');
Эта проблема связана с тем, что ваш веб-сервер отправляет заголовок HTTP, который не соответствует указанному вами. Инструкции о том, как заставить сервер отправлять правильные заголовки, см. На этой странице.
В противном случае вы также можете использовать PHP для изменения заголовков, но это нужно сделать перед выводом любого текста с использованием этого кода:
header('Content-Type: text/html; charset=utf-8');
Более подробную информацию о том, как отправлять заголовки с помощью PHP, можно найти в документации по функции заголовка.
Вы также можете использовать более короткий путь:
<?php header('Content-Type: charset=utf-8'); ?>
См. RFC 2616, он действителен для указания только кодировки.
Для правильной реализации вам нужно изменить ряд вещей.
База данных.(Сразу после подключения):
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
PHP отправляет заголовки автоматически, если настроена внутренняя кодировка
ini_set('default_charset', 'utf-8');
Как объяснено на http://php.net/default-charset ,
«UTF-8» является значением по умолчанию, и его значение используется в качестве кодировки символов по умолчанию для htmlentities (), html_entity_decode() и htmlspecialchars(), если параметр кодировки опущен.
Он установлен по умолчанию
php.ini
как " UTF-8 " в разделе " Обработка данных " как:
; PHP's default character set is set to UTF-8.
; http://php.net/default-charset
default_charset = "UTF-8"
Кроме того, вы можете установить перед содержимым
header
в другую кодировку по мере необходимости:
header('Content-Type: text/html; charset=utf-8');
или
header('Content-Type: text/html; charset=iso-8859-1');
или любую другую кодировку, которую вам нужно объявить.