Apache的默认编码是ISO-8859-1,但网站是UTF-8?

Leo*_*ang 1 php apache encoding utf-8

我必须第一次处理编码问题,我对 PHP、Apache 和浏览器如何处理编码感到困惑。PHP 和 Apache 默认使用 ISO-8859-1,但大多数网站都是 UTF-8。ISO-8859-1 在什么时候转换为 UTF-8?另外,既然PHP使用ISO-8859-1,为什么它可以读取UTF-8网页呢?

dec*_*eze 5

Apache 默认情况下不“使用”任何编码,它的工作与理解或转换文本编码几乎没有任何关系。PHP 默认情况下不“使用”ISO-8859,PHP 的字符串没有关联的编码。

事实是,许多 PHP 核心字符串函数在其操作中假定采用ASCII 或 ISO-8859 编码,并且无法正确处理其他编码。然而,值得再次说明的是,PHP 字符串作为一种数据类型本身没有任何编码,没有什么可以阻止您在 PHP 中使用您希望的任何编码的字符串,并且 PHP 甚至提供了在虚拟环境中正确处理字符串操作的函数。任何任意编码。因此,只要你做得正确,就没有什么可以阻止你用 PHP 处理和输出 UTF-8。

然后,Apache 根本不关心您到底要发送给客户端的内容,它不会妨碍任何人以任何编码输出文本(或二进制数据)。它唯一可以做的就是向响应中添加一个像这样的 HTTP 标头:

Content-Type: text/html; charset=iso-8859-1
Run Code Online (Sandbox Code Playgroud)

该标头仅用于通知客户端它收到的内容。该标头不以任何方式基于您发送的实际内容,Apache 既不关心也不检查或转换任何内容。它只是设置这个标头,仅此而已。charset您应该配置 Apache 以设置与您实际从 PHP 输出的编码相对应的正确值,其默认值只是iso-8859-1. 或者您可以Content-Type从 PHP 中自行设置一个标头,以防止 Apache 添加标头。就这样。

有关详细信息,请参阅每个程序员绝对需要了解的有关处理文本的编码和字符集的信息在 Web 应用程序中从前到后处理 Unicode