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

Apache's default encoding is ISO-8859-1 but websites are UTF-8?

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


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

事实上,许多PHP的核心字符串函数在其操作中都采用ASCII或ISO-8859编码,并且没有适当的装备来处理其他编码。但是,值得再次说明的是,作为数据类型的php字符串本身没有任何编码,没有什么可以阻止您在php和php中的任何编码中使用字符串,甚至提供了在几乎任何任意编码中正确处理字符串操作的函数。所以,只要你做的正确,没有什么能阻止你用PHP处理和输出UTF-8。

因此,Apache根本不关心您发送给客户机的确切内容,它在以任何编码(或二进制数据)输出文本方面都不会妨碍任何人。它唯一能做的就是向响应中添加这样的HTTP头:

1
Content-Type: text/html; charset=iso-8859-1

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

有关更多信息,请参阅每个程序员绝对、积极地需要了解的关于编码和字符集的内容,以便在Web应用程序中前后处理Unicode。