我怎么能知道什么样的编码将被用于PHP时发送数据浏览器?I.e。与Cotent型头,例如:iso-8859-1.

有帮助吗?

解决方案

通常Apache+PHP服务器的webhosters配置发出 没有 charset.最短的方式来测试你的服务器配置是这些:

  • 使用 这个工具以看到服务器头 通过得到任何你自己的网页上你的网站。如果在服务器头你看到一个 charset 这意味着你的服务器使用,通常它不会包含一个 charset.
  • 另一种方式是运行这个简单的脚本上你的服务器: <?php echo ini_get('default_charset'); ?> 如上面所说的这种通常的打印出来的一个空串,如果不同的它会告诉你的 charset PHP.

2号方案是假设Apache配置不用 AddDefaultCharset some_charset 这不是通常的情况,但在这种情况下,我很害怕Apache设置可能override PHP deafult_charset ini directive.

其他提示

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

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

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

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

QUOT; <!>字符集QUOT;实际上是字符编码。它不在一个单独的标题中;但是有一个标题叫做<!> quot; Content-Encoding <!> quot;它实际上指定了响应使用的压缩类型(例如gzip)。

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

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

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

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

如果你的服务器是不是配置有一个默认的内容或charset,也不是PHP,PHP将仅发送 Content-Type: text/html -它不会指定一个charset在所有,并将发送字节,因为它认为他们在脚本。

如果浏览器收到的一页而不charset规定,各种事可能发生这样的情况:

  • 最浏览器中有"编码/Charset"菜单;如果用户的明确选择之一,浏览器将试图适用于它。不会发生太多,因此:
  • 一些浏览器试图使它有一个默认charset(其是区域设置相关的,例如FF和cs_CZ它曾经是 iso-8859-2;情况因人而异)
  • 即将试图确定charset试探性地(这将需要一个猜测,基于角色分配,很多时候,它得到它的权利;有时它得到它错了,你得到一个网页在罗马尼亚解释为中文文本,这通常意味着"不可读")
  • 一些旧的浏览器将落在后面 us-ascii

如果这个过程中,PHP script的charset和浏览器的charset相匹配,文本将会-小心-是的可读性。如果没有,将有奇怪的迹象及类似现象。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top