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

时间:2020-03-06 14:41:41  来源:igfitidea点击:

当向浏览器发送数据时,我怎么知道PHP将使用哪种编码? IE。带有Cotent-Type标头,例如:iso-8859-1.

解决方案

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

AFAIK,PHP按字节发送字符串。也就是说,如果变量持有UTF-8,它将发送UTF-8. 如果我们有iso-8859-1,它也会发送。如果混合使用,效果会不佳。

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

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

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

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

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

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

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

如果服务器未配置为具有默认内容或者字符集,而PHP都不是,PHP将仅发送Content-Type:text / html,它将完全不指定字符集,并且将发送字节他们在脚本中。

如果浏览器收到未指定字符集的页面,则可能发生各种情况:

  • 大多数浏览器都有"编码/字符集"菜单;如果用户明确选择一个,浏览器将尝试应用它。不会经常发生,因此:
  • 一些浏览器尝试使用默认字符集来呈现它(它是与语言环境相关的,例如对于FF和cs_CZ,它以前是" iso-8859-2"; YMMV)
  • IE会尝试试探性地确定字符集(根据字符分布进行猜测,而且很多时候它会正确;有时它会出错,并且我们将罗马尼亚语的页面解释为中文文本,通常表示"不可读")
  • 一些旧的浏览器将依赖于" us-ascii"

如果通过此过程,PHP脚本的字符集和浏览器的字符集匹配,则文本将被意外读取。如果没有,将会出现怪异的迹象和类似现象。