PHP 5.6 Charset Header返回ISO-8859-1?

时间:2015-05-17 18:22:14

标签: php .htaccess utf-8 character-encoding

我的托管服务最近将我的网站服务器从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');

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

所以...我想知道是否有人会知道为什么我的PHP.ini或htaccess修复程序不能普遍完成这项工作?这些不起作用的事实是否表明某些其他Apache设置控制了charset的响应头?

提前致谢。

更新:我甚至尝试添加

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

到.htaccess但没有快乐。

5 个答案:

答案 0 :(得分:6)

Spiele-Umsonst的回答对我来说没有用(在Apache上),但这就是诀窍:

php_value default_charset Off
AddDefaultCharset ISO-8859-1

&#34;关闭&#34;是&#34; AddDefaultCharset&#34;的有效值,所以我猜对于default_charset也是如此。 &#34;无&#34;是无效的,所以我想这就是为什么它没有用。我认为这可能取决于一些服务器配置或使用的http deamon。

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

答案 1 :(得分:3)

这个.htaccess会帮助你的朋友:

php_value default_charset None
AddDefaultCharset ISO-8859-1

不要忘记html文件:P从元标记中清除它们或确保它们是alos ISO

答案 2 :(得分:0)

对于Apache,默认字符集在httpd.conf中设置。看看这个主题:Setting PHP default encoding to utf-8?

祝你好运!

答案 3 :(得分:0)

  • php_value更改php config
  • AddDefaultCharset更改apache config

要在.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来阻止。

答案 4 :(得分:0)

如果上述方法无效,则可能需要在PHP文件顶部尝试以下操作:

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