我的托管服务最近将我的网站服务器从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但没有快乐。
答案 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)
要在.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");