charset=iso-8859-2 网页显示带有 UTF-8 标头 - 问号 (�) 而不是重音字母

charset=iso-8859-2 网页显示带有 UTF-8 标头 - 问号 (�) 而不是重音字母

我有一个网络服务器管理问题。在此网站中:http://www.mirkaphoto.hu/ 所有 PHP 生成的页面均包含以下行:

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2" />

但这可能被 php-apache 处理忽略了,页面在带有 UTF-8 标头的浏览器中显示。结果页面文本中显示的是问号 (�),而不是重音字符 (éáöőóüűúí)。我在 Firefox、IE、Chrome 和 Seamonkey 中对此进行了测试。

这个现象中最奇怪的是,这个症状是昨天才开始的,当时我将服务器从 7.0 Wheezy 升级到 Debian 8.0 Jessie。在升级过程中,我还升级了所有其他软件包,包括 apache、php 等,并选择“是”以使用出厂默认配置文件覆盖配置文件。此后,我对配置文件进行了微调,使一切都符合我的要求,但我没有找到解决这个问题的方法。在升级之前,页面显示正常。

下面是一个屏幕截图,您可以看到 Firefox 看到了“charset=iso-8859-2”的定义,但是仍然以 UTF-8 编码显示页面。

截屏

我怀疑这是服务器配置问题,但也可能是处理组件(Apache、php)的某个部分由于升级而发生了某种变化,导致出现这种奇怪的行为。问题是,我无法确定是什么原因导致了这个问题。

有人能解决这个谜题吗?页面处理过程中可能出现什么问题?

答案1

服务器的 HTTP 标头显示

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

浏览器可能会认为这些内容比文件内部的内容更值得信赖。为什么不直接使用 UTF-8?它是所有平台上的既定编码。

此外,HTML 声明之前还有垃圾文本:

[M _2<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

答案2

经过大量搜索,我终于找到了正确的解决方案。非常感谢@丹尼尔B,为我指明了正确的方向。:)

看来,由于升级,apache2 引擎会处理所有带有字符集Content-Type "text/html的文件UTF-8,而忽略<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2" />实际 html / php 文件中的语句。我不确定这为什么是件好事(如果可以的话请解释一下)。不过,删除问号字符 (�) 的解决方案如下:

解决方案:我将下面的行添加到VirtualHost我网站的 apache2 定义 中,/etc/apache2/sites-available/MySiteName.conf然后使用命令重新加载服务器配置service apache2 reload。此后,文件将使用正确的Content-Type: text/html; charset=iso-8859-2字符编码标头提供。

<VirtualHost * >

# [...Some other configurations before this line]

    #To fix encoding problem, that pages display with UTF-8 header though they are created with iso-8859-2 encoding - giny8i8 2015-12-03
    Header set Content-Type "text/html; charset=iso-8859-2"
        # Source:  http://superuser.com/questions/1008480/charset-iso-8859-2-webpage-displays-with-utf-8-header-question-marks-inste/1008482?noredirect=1#comment1397150_1008482

</VirtualHost>

如果您在升级到 Debian 8.0 Jessie 后遇到同样的问题,请告诉我这是否对您也有用!我在网上搜索过这个问题,但没有找到这样的解释。因此我发了回复帖子。

相关内容