PHP 5.6字符集标头返回ISO-8859-1


PHP 5.6 Charset Header Back To ISO-8859-1?

我的托管服务最近将我的网站服务器从PHP 5.3升级到5.6,它破坏了我的网站,因为我所有的html/PHP文件都是ISO-8859-1,但网站现在被提供的响应头显示

charset=UTF-8

我明白我应该最终移动到UTF-8文件,但同时我想要一个快速修复。我尝试了以下修复:

<meta charset="ISO-8859-1"> (in the <head> tag of html files)
AddDefaultCharset ISO-8859-1 (in .htaccess)
default_charset= "ISO-8859-1" (in php.ini)

…但是这些都不影响响应头的字符集。

在测试中唯一有效的是将这一行添加到大多数(不是全部)页面使用的header.php文件中:
header('Content-Type: charset=ISO-8859-1');

但是我不想遍历所有的散列文件并将其添加到每个文件中。如果我要搜索它们并以这种方式触摸它们,我不妨将所有文件转换为UTF-8。

所以…我想知道是否有人会知道为什么我的PHP.ini或htaccess修复不做普遍的工作?这些不工作的事实表明,一些其他的Apache设置是在charset的响应头控制?

提前感谢。

更新:我甚至尝试添加

addCharset ISO-8859-1 .html .htm .php 

Spiele-Umsonst的答案不适合我(在Apache上),但这是一个技巧:

php_value default_charset Off
AddDefaultCharset ISO-8859-1

"Off"是"AddDefaultCharset"的有效值,所以我猜default_charset也是如此。"没有"是无效的,所以我想这就是它不起作用的原因。我认为这可能取决于某些服务器配置或使用的http守护进程。

Apache web服务器的进一步阅读:http://httpd.apache.org/docs/current/mod/core.html#adddefaultcharset

这在。htaccess中将会帮助你,我的朋友:

php_value default_charset None
AddDefaultCharset ISO-8859-1

不要忘记html文件:p将它们从meta标签中清除或确保它们也是ISO

如果上面的操作不起作用,您可能想要在PHP文件的顶部尝试这样的操作:

mb_internal_encoding("iso-8859-1");
mb_http_output( "iso-8859-1" );
ob_start("mb_output_handler");

对于Apache,默认的字符集是在httpd.conf中设置的。查看这个线程:设置PHP默认编码为utf-8?

祝你好运!


  • AddDefaultCharset更改apache配置

修改。htaccess或/etc/apache2/sites-available/?这取决于所需的作用域。
我在。htaccess php_value default_charset ISO-8859-1中重写php.ini default_charset UTF-8的值。
它正在运行,因为我在apache配置文件中没有AddDefaultCharset。我添加了。htaccess AddDefaultCharset ISO-8859-1来防止。