PHP:用于将数据发送到浏览器的当前编码

时间:2008-09-24 23:08:19

标签: php header character-encoding

如何知道PHP在向浏览器发送数据时将使用哪种编码?即使用Cotent-Type标头,例如:iso-8859-1。

6 个答案:

答案 0 :(得分:1)

您可以使用William建议的header()解决方案,但是如果您正在运行Apache,并且Apache配置使用默认字符集,那么每次都会获胜(Internet Explorer会发疯)请参阅:AddDefaultCharset

答案 1 :(得分:1)

请记住,内容类型和编码是两回事。 text / html是一种内容类型; ISO-8859-1和UTF-8是编码。

服务器发送的HTTP响应头通常如下所示:

Content-Type: text/html; charset=utf-8

“charset”实际上是字符编码。它不在一个单独的标题中;但是有一个名为“Content-Encoding”的标题实际上指定了响应使用的压缩类型(例如gzip)。

如果要在包含HTML的文件中将字符编码更改为UTF-8:

<?
header("Content-Type: text/html; charset=utf-8");

答案 2 :(得分:1)

通常,网络主机的Apache + PHP服务器配置为发送 NO charset标题。 测试服务器配置方式的最短方法是:

  • 通过在您的网站上获取任何一个页面来使用this tool to see the server header。 如果您在服务器标题中看到charset,则表示您的服务器正在使用它,通常它不会包含charset
  • 另一种方法是在您的服务器上运行这个简单的脚本:<?php echo ini_get('default_charset'); ?>如上所述,这通常会打印出一个空字符串,如果不同,它会显示PHP的charset

第二个解决方案是假设Apache没有配置AddDefaultCharset some_charset,但通常情况并非如此,但在这种情况下,我担心Apache设置可能会覆盖PHP deafult_charset ini指令。

答案 3 :(得分:0)

您可以使用header('Content-type: xxx/yyy');设置自己的内容,但我相信默认情况下会发送text / html。

答案 4 :(得分:0)

AFAIK,PHP按字节顺序发送字符串。也就是说,如果您的变量包含UTF-8,它将发送UTF-8。如果你有iso-8859-1,它也会发送它。如果你混合它们,它就不会很漂亮。

答案 5 :(得分:0)

如果您的服务器未配置为具有默认内容或字符集,并且PHP也不是,PHP将仅发送Content-Type: text/html - 它根本不会指定字符集,并将发送字节,因为它看到他们在剧本中。

如果浏览器收到没有指定字符集的页面,可能会发生各种各样的事情:

  • 大多数浏览器都有“编码/字符集”菜单;如果用户明确选择一个,浏览器将尝试应用它。不经常发生,所以:
  • 某些浏览器尝试使用默认字符集(依赖于语言环境,例如FF和cs_CZ,它曾经是iso-8859-2; YMMV)来呈现它
  • IE将尝试以启发式方式确定字符集(它会根据字符分布进行猜测 - 很多时候它会正确;有时它会弄错,你会将罗马尼亚语中的页面解释为中文文本,通常意思是“不可读”)
  • 某些旧版浏览器会依赖us-ascii

如果使用此过程,PHP脚本的charset和浏览器的charset匹配,则文本将 - 意外 - 可读。如果没有,会有奇怪的迹象和类似的现象。