我有几个PHP页面用下面的代码将各种内容回显到HTML页面。
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
然而,当我使用W3C验证器验证时,它会出现:
HTTP报头(iso-8859-1)中指定的字符编码与元素(utf-8)中的值不同。
我对PHP很陌生,我想知道我是否可以并且应该更改PHP文件的头以匹配HTML文件。
我有几个PHP页面用下面的代码将各种内容回显到HTML页面。
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
然而,当我使用W3C验证器验证时,它会出现:
HTTP报头(iso-8859-1)中指定的字符编码与元素(utf-8)中的值不同。
我对PHP很陌生,我想知道我是否可以并且应该更改PHP文件的头以匹配HTML文件。
当前回答
正如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('Content-Type: text/html; charset=utf-8');
or
header('Content-Type: text/html; charset=iso-8859-1');
或者其他需要声明的字符集。
其他回答
这是一个与您的web服务器发送的HTTP头不匹配您定义的问题。有关如何使服务器发送正确的报头的说明,请参阅此页。
否则,你也可以使用PHP来修改标题,但这必须在使用以下代码输出任何文本之前完成:
header('Content-Type: text/html; charset=utf-8');
关于如何使用PHP发送报头的更多信息,可以在header函数的文档中找到。
使用header修改HTTP报头:
header('Content-Type: text/html; charset=utf-8');
注意在任何输出发送到客户端之前调用这个函数。否则,头也已发送,你显然不能再改变它。你可以用headers_sent检查。有关更多信息,请参阅手册页的标题。
如果设置为使用内部编码,PHP会自动发送头文件:
ini_set('default_charset', 'utf-8');
为了实现正确的实现,您需要更改一系列内容。
数据库(连接后立即):
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
正如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('Content-Type: text/html; charset=utf-8');
or
header('Content-Type: text/html; charset=iso-8859-1');
或者其他需要声明的字符集。