У меня есть несколько страниц PHP, выводящих различные данные эхом на страницы HTML со следующим кодом.
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
Однако, когда я проверяю с помощью W3C validator, он выдает следующее:
Кодировка символов, указанная в HTTP-заголовке (iso-8859-1), отличается от значения в элементе <meta> (utf-8).
Я совсем новичок в PHP, и мне интересно, могу ли я и должен ли я изменить заголовок для PHP файлов, чтобы он соответствовал HTML файлам.
Используйте 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, можно найти в документации к функции header.
Вы также можете использовать более короткий путь:
<?php header('Content-Type: charset=utf-8'); ?>
См. RFC 2616. Допустимо указывать только набор символов.
Для правильной реализации вам нужно изменить ряд вещей.
База данных (сразу после подключения):
mysql_query("SET NAMES utf8");
// Meta tag HTML (probably it's 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');