2008-09-24 65 views

回答

1

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指令。

0

你可以设置自己与​​,但我相信,text/html的默认情况下发送。

+0

我不想把它,我想知道什么是默认的内容类型将被设置,如果我没有设定一个。 – avernet 2008-09-24 23:11:12

0

据我所知,PHP将字符串按字节。也就是说,如果你的变量保存UTF-8,它将发送UTF-8。如果你有iso-8859-1,它也会发送。如果你把它们混合在一起,它不会很漂亮。

+0

正确 - 我正在使用mb_ *字符串转换函数将我的字符串转换为“默认使用的PHP编码”。但为了正确地进行转换,我需要知道PHP将使用的编码。 – avernet 2008-09-24 23:15:44

1

您可以使用头()解决方案,威廉建议,但是如果你正在运行的Apache和Apache的配置使用默认字符集,这将赢得每次(Internet Explorer将发疯)看:AddDefaultCharset

1

请记住,内容类型和编码是两码事。 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"); 
+0

也许我的问题并不清楚:我不想设置编码。我想知道编码将由PHP设置,如果我没有设置。我想知道默认编码是什么。 – avernet 2008-09-24 23:42:20

0

如果您的服务器没有配置为具有默认的内容或字符集,也不是PHP, PHP将只Content-Type: text/html派 - 它不会在所有指定字符集,当它看到他们的脚本将发送的字节数。

如果浏览器不接收字符集指定的页面,各种事情都可能发生:

  • 大多数浏览器有一个“编码/字符集”菜单;如果用户明确选择了一个,浏览器将尝试应用它。往往不会发生,那么:(和语言环境相关,例如,对于FF cs_CZ它使用的是iso-8859-2;因人而异)
  • 某些浏览器尝试用默认的字符集,以使其
  • IE将尝试确定字符集启发式(它会采取一种猜测,基于字符的分布 - 很多时候它得到它的权利;有时它得到它错了,你在罗马尼亚获得一个页面解读为中国文字,这通常意味着“不可读”)
  • 一些旧的浏览器会回退us-ascii

如果用这个程序,PHP脚本的字符集和眉毛呃的字符集匹配,文本将 - 意外 - 可读。否则,会出现奇怪的迹象和类似的现象。

相关问题