我最近将我的PHP-Webspace更新到5.6(从5.5),发生了一些奇怪的事情。即使我正在使用Meta Tag 和.htaccess文件中的以下行,我的网站也会突然错误地显示UTF-8字符
AddDefaultCharset utf-8
。
在我的PHP脚本中插入以下行后,一切又恢复了header('Content-Type: charset=utf-8');
。
这两者都发生在我的Webspace(我无法访问php.ini文件)和本地服务器上。因为我也在使用其他PHP脚本,所以我不想插入header('Content-Type: charset=utf-8');
所有配置文件...
可能是什么原因?
只是Content-Type: charset=utf-8
无效,我不知道浏览器会如何解释。也许您实际上是在覆盖正确的UTF-8标头,以使浏览器现在不会将您的网站解释为UTF-8。如果在您的网站未解释为UTF-8的情况下可以正常工作,则意味着您的网站实际上不是UTF-8编码的。首先,通过在视图→编码中在浏览器中显式选择一种编码来进行测试。
因此,我告诉您,这可能意味着您的网站实际上并未被解释为UTF-8,因为这是无效的Content-Type标头。这可能意味着您的网站实际上不是UTF-8编码的。这将指出一些深层次的问题。
但是就像我解释的那样,在我从PHP 5.5升级到5.6之前,这一切都起作用。为了使其再次起作用,我在PHP中添加了标头(顺便说一句使我惊讶的是它起作用了)。可能与我通过FTP上传文件的方式有关吗?
如果您不想使用php的header()函数,则可以使用meta
html标签。
PHP 5.6中的default_charset php.ini设置从空更改为UTF-8。如果尝试在HTML头中设置其他字符集,则可能会破坏HTML输出。它还可能会破坏htmlentities()和htmlspecialchars之类的函数。
就我而言,我曾经使用php函数将默认字符集设置为UTF-8 mb_http_output('UTF-8');
,尽管对于PHP5.6,我删除了该函数,因为它似乎是多余的。它使字符显示再次可读。