如何设置HTTP头UTF-8使用PHP是有效的W3C验证器

我有几个PHP页,用以下代码将各种内容回显到超文本标记语言页。

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

然而,当我使用W3C验证器进行验证时,它会出现:

HTTP报头(iso-8859-1)中指定的字符编码与元素(utf-8)中的值不同。

我对PHP很陌生,我想知道我是否可以并且应该更改PHP文件的头以匹配HTML文件。

1118781 次浏览

使用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 < a href = " http://en.wikipedia.org/wiki/List_of_HTTP_header_fields " > < / >

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

这是一个与您的web服务器发送的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 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所述,

< p >“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');

或者其他需要声明的字符集。