我有几个PHP页面使用以下代码在HTML页面中回显各种内容。使用PHP设置HTTP标头为UTF-8使用PHP
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
然而,当我验证使用W3C validator谈到了:
在HTTP报头(ISO-8859-1)中指定的字符编码距离值不同的元件( UTF-8)。
我对PHP很陌生,我想知道如果我可以并且应该更改PHP文件的标题以匹配HTML文件。
我有几个PHP页面使用以下代码在HTML页面中回显各种内容。使用PHP设置HTTP标头为UTF-8使用PHP
<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来修改标题,但是这必须完成之前使用该代码的输出任何文本:如何使用PHP可以发出头
header('Content-Type: text/html; charset=utf-8');
要正确实施,您需要更改一系列的东西。
数据库(连接后):
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');
我想补充一点,当你正确设置HTTP头这样,你根本不需要'`标签。 – Jon 2010-11-25 16:55:55
@Jon:我会使用两者。当HTML文档没有通过HTTP加载(例如从磁盘加载)时,使用与HTTP等效的META。 – Gumbo 2010-11-25 16:59:09
这将只在你执行php时才起作用,为静态页面做,你应该保存你的html文件为utf-8。这样做会将BOM字符utf-8编码添加到文件的开头。字节0xEF,0xBB,0xBF添加到文件的开头。大多数Web服务器都会注意到这一点,并应用适当的标题事实上,将你的php文件保存为utf-8,可以达到同样的效果。 – Rahly 2010-11-25 16:59:26