PHP:目前使用的编码发送数据浏览器
-
02-07-2019 - |
题
我怎么能知道什么样的编码将被用于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相匹配,文本将会-小心-是的可读性。如果没有,将有奇怪的迹象及类似现象。