使用PHP将HTTP标头设置为UTF-8

我有几个PHP页面使用下面的代码在HTML页面中回显各种各样的东西。

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

但是,当我使用W3Cvalidation器进行validation时,它提供了:

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

我对PHP很陌生,想知道是否可以改变PHP文件的头文件来匹配HTML文件。

使用header修改HTTP头:

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

请注意,在将任何输出发送到客户端之前调用此函数。 否则头也被发送了,你显然不能再改变它了。 你可以用headers_sent来检查。 有关更多信息,请参阅header的手册页 。

首先确保PHP文件本身是UTF-8编码。

meta标签被某些浏览器忽略。 如果你只使用ASCII字符,反正无所谓。

http://en.wikipedia.org/wiki/List_of_HTTP_header_fields

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

这是您的Web服务器发送与您定义的HTTP标头不匹配的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');