PHP:用于将数据发送到浏览器
webhosters的Apache + PHP服务器通常配置为发送NO charset
标头。 测试服务器是如何配置的捷径是这些:
- 使用this tool to see the server header通过让你的网站页面中的任何一个。 如果在服务器头文件中看到
charset
这意味着您的服务器正在使用它,通常它不会包含charset
。 - 另一种方法是在服务器上运行这个简单的脚本:
<?php echo ini_get('default_charset'); ?>
正如上面说这通常打印出一个空字符串,如果不同它会告诉你的PHP的charset
。
第2解决方案是假设Apache不与AddDefaultCharset some_charset
配置这是不常见的情况,但在这种情况下,恐怕Apache的设置可能会重写PHP deafult_charset INI指令。
你可以设置自己与,但我相信,text/html的默认情况下发送。
据我所知,PHP将字符串按字节。也就是说,如果你的变量保存UTF-8,它将发送UTF-8。如果你有iso-8859-1,它也会发送。如果你把它们混合在一起,它不会很漂亮。
正确 - 我正在使用mb_ *字符串转换函数将我的字符串转换为“默认使用的PHP编码”。但为了正确地进行转换,我需要知道PHP将使用的编码。 – avernet 2008-09-24 23:15:44
您可以使用头()解决方案,威廉建议,但是如果你正在运行的Apache和Apache的配置使用默认字符集,这将赢得每次(Internet Explorer将发疯)看:AddDefaultCharset
请记住,内容类型和编码是两码事。 text/html是内容类型; ISO-8859-1和UTF-8是编码。
HTTP响应报头服务器发送通常看起来像这样:
Content-Type: text/html; charset=utf-8
“字符集”实际上是字符编码。这不是在一个单独的标题;然而有一个名为“内容编码”头其实际上规定了什么压缩的响应的用途(例如gzip的)的种类。
如果你想的字符编码改为UTF-8,在包含HTML文件:
<?
header("Content-Type: text/html; charset=utf-8");
也许我的问题并不清楚:我不想设置编码。我想知道编码将由PHP设置,如果我没有设置。我想知道默认编码是什么。 – avernet 2008-09-24 23:42:20
如果您的服务器没有配置为具有默认的内容或字符集,也不是PHP, PHP将只Content-Type: text/html
派 - 它不会在所有指定字符集,当它看到他们的脚本将发送的字节数。
如果浏览器不接收字符集指定的页面,各种事情都可能发生:
- 大多数浏览器有一个“编码/字符集”菜单;如果用户明确选择了一个,浏览器将尝试应用它。往往不会发生,那么:(和语言环境相关,例如,对于FF cs_CZ它使用的是
iso-8859-2
;因人而异) - 某些浏览器尝试用默认的字符集,以使其
- IE将尝试确定字符集启发式(它会采取一种猜测,基于字符的分布 - 很多时候它得到它的权利;有时它得到它错了,你在罗马尼亚获得一个页面解读为中国文字,这通常意味着“不可读”)
- 一些旧的浏览器会回退
us-ascii
如果用这个程序,PHP脚本的字符集和眉毛呃的字符集匹配,文本将 - 意外 - 可读。否则,会出现奇怪的迹象和类似的现象。
我不想把它,我想知道什么是默认的内容类型将被设置,如果我没有设定一个。 – avernet 2008-09-24 23:11:12