Web服务器覆盖页面编码?

时间:2017-01-05 06:30:29

标签: apache encoding utf-8 character-encoding

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

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

最近,他们都被打破了 - 文字显示为无法识别的UTF-8字符 - 里面有问号的钻石。

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

我认为我主机上的服务器可能正在强制使用UFT-8编码。我已经更改了.htaccess以强制执行windows-1255编码,但它无效。

我尝试通过W3C验证页面,并将页面视为UTF-8

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

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

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

感谢。

1 个答案:

答案 0 :(得分:2)

经过多次挣扎,一个善良的灵魂帮助我意识到,不是Apache在标题中覆盖了字符集,而是PHP本身。

添加

header('Content-Type: text/html; charset=windows-1255');

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

据我所知,链条如下:

  1. 默认情况下,Apache使用UTF-8标头发送内容
  2. 如果.htaccess中设置了另一个字符集,浏览器会接受
  3. 然后是PHP并在php.ini中的default_charset指定的标题中强制charset
  4. 您在页面到达浏览器之前定义的任何内容都会被忽略。