我有几个 PHP 页面使用以下代码将各种内容回显到 HTML 页面中。
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
但是,当我使用 W3C validator 进行验证时,它会出现:
HTTP 标头 (iso-8859-1) 中指定的字符编码与元素 (utf-8) 中的值不同。
我对 PHP 很陌生,我想知道是否可以并且应该更改 PHP 文件的标头以匹配 HTML 文件。
使用 header
修改 HTTP 标头:
header('Content-Type: text/html; charset=utf-8');
请注意在将任何输出发送到客户端之前调用此函数。否则标头也已发送,您显然无法再更改它。您可以使用 headers_sent
进行检查。有关详细信息,请参阅 manual page of header
。
首先确保 PHP 文件本身经过 UTF-8 编码。
某些浏览器会忽略元标记。如果您只使用 ASCII 字符,那也没关系。
http://en.wikipedia.org/wiki/List_of_HTTP_header_fields
header('Content-Type: text/html; charset=utf-8');
这是您的 Web 服务器发送的 HTTP 标头与您定义的标头不匹配的问题。有关如何使服务器发送正确标头的说明,请参阅 this page。
否则,您也可以使用 PHP 修改标题,但这必须在使用此代码输出任何文本之前完成:
header('Content-Type: text/html; charset=utf-8');
有关如何使用 PHP 发送标头的更多信息,请参见 the documentation for the header function。
您还可以使用更短的方式:
<?php header('Content-Type: charset=utf-8'); ?>
请参阅RFC 2616。只指定字符集是有效的。
Content-Type = "Content-Type" ":" media-type
和 media-type = type "/" subtype *( ";" parameter )
为了正确实现,您需要更改一系列内容。
数据库(连接后立即):
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');
如 http://php.net/default-charset 所述,
“UTF-8”是默认值,如果省略 encoding 参数,则其值用作 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');
或您需要声明的任何其他字符集。
<meta>
标记了。META
。