0

我很难理解为什么当我通过 HTTP 访问一个简单的 PHP 页面时,它的文本看起来很好,但当我通过 HTTPS 访问它时,它却被扭曲了。

该页面包含希腊文本,文件的编码是 UTF-8,并且我在 HTML 标头中有内容元标记:

<meta content="text/html; charset=utf-8" http-equiv="Content-Type">

这可能是什么原因?

4

1 回答 1

4

HTTP 与 HTTPS 通常对网页的字符编码没有影响,因为 HTTPS 仅加密套接字连接,仅此而已。字节仍然按原样从网络服务器传输到网络浏览器,只是加密。因此,如果网页在 HTTPS 下的呈现方式与在 HTTP 下的呈现方式不同,则 Web 服务器在每种协议下发送不同的数据。

在您的特定情况下,实际上是这种情况。在 HTTP 下,网络服务器发送 UTF-8 编码的 HTML 和一个未指定字符集的 HTTP标头,这允许网络浏览器使用 HTML标记Content-Type: text/html中指定的 UTF-8 字符集。meta

但是,在 HTTPS 下,网络服务器发送的是 UTF-8 编码的 HTML 和一个 HTTPContent-Type: text/html; charset=iso-8859-15标头。HTTP 标头中的字符集会覆盖 HTMLmeta标记中的 UTF-8 字符集,因为 HTTP 标头具有优先权。如果您告诉您的网络浏览器忽略 HTTPS 提供的Content-Type字符集并强制将 HTML 解释为 UTF-8,它的呈现方式与 HTTP 提供的网页相同。所以问题是您的网络服务器Content-Type在 HTTPS 下的标头中发送了错误的字符集,但在 HTTP 下没有。HTML 本身在这两种情况下都很好。因此,要么网络服务器配置不正确,要么 PHP 脚本在通过 HTTPS 发送数据时存在字符集错误。

于 2012-09-19T00:35:48.760 回答