网络服务器覆盖页面编码?

Han*_*hen 5 apache encoding utf-8 character-encoding

我有 10 多年前用 PHP 手动编码的页面。

它们以旧的希伯来语编码 - windows-1255

最近,它们都坏了——文本显示为无法识别的 UTF-8 字符——里面有一个问号的菱形。

当我在浏览器(任何浏览器)中手动更改编码时,文本会正确显示。

我想可能是我主机上的服务器强制使用 UFT-8 编码。我已更改 .htaccess 以强制使用 windows-1255 编码,但它不起作用。

我尝试通过 W3C 验证页面,它认为该页面为 UTF-8

我下载了 XAMPP 并在本地运行服务器,但它仍在发生。

在过去的一年里,Apache 提供网页编码的方式有什么变化吗?

在查看所有页面并更改其编码之前,我想知道是否有一个全局“开关”可以翻转以便我的页面正确显示。

谢谢。

Han*_*hen 2

经过一番努力,一位好心人帮助我意识到,不是 Apache 覆盖了标头中的字符集,而是 PHP 本身。

添加

header('Content-Type: text/html; charset=windows-1255');
Run Code Online (Sandbox Code Playgroud)

PHP 文件的顶部修复了该问题。

据我了解,链条如下:

  1. 默认情况下,Apache 发送带有 UTF-8 标头的内容
  2. 如果在 .htaccess 中设置了另一个字符集,浏览器会接受它
  3. 然后是 PHP 并强制标头中的字符集由 php.ini 中的 default_charset 指定

您在页面到达浏览器之前定义的任何内容都会被忽略。