PHP 5.6升级和特殊字符

时间:2015-03-11 23:32:41

标签: php special-characters

我有一个网站,我使用php来包含部分,而不是为每个页面复制代码 但是,最近我的webhost将PHP升级到5.6,现在我所有的Æ,Ø和Å都给了我替换字符( )。
我没有运行任何数据库,并且在html中设置charset没有帮助。

我对PHP很缺乏经验,所以我不知道如何解决它。
请,任何帮助都会很棒!

4 个答案:

答案 0 :(得分:5)

从php 5.5升级后我遇到了同样的问题。到5.6。

通过在我的脚本中将default_charset设置为空字符串来解决它:

ini_set("default_charset", "");

或者,如果您已经加入php.ini,则可以设置default_charset = ""

更多信息:https://www.saotn.org/php-56-default_charset-change-may-break-html-output/

答案 1 :(得分:3)

PHP 5.6将default_charset的默认值更改为UTF-8。 应该更好地设置该值。

如果您的php文件的字符集是ISO-8859-1(所有在目录中),您可以轻松地将.htaccess文件放在根目录中:

php_value default_charset ISO-8859-1

如果只有部分文件在ISO-8859-1中,您可以轻松地在php文件的第一行发送标题(不需要default_charset):

<?php 
header('Content-Type: text/html; charset=iso-8859-1');
?>

或者将php textfiles的编码转换为utf8并且不要更改默认值。

答案 2 :(得分:2)

目前最好的办法是降级到PHP 5.5或5.4,因为CBroe在他的评论中解释说PHP 5.6现在将默认字符集设置为UTF-8,许多网站仍未准备好。迁移到新服务器后我遇到了同样的问题,所以我降级到PHP 5.5并自动重新显示所有特殊字符。如果您正在使用WHM,请使用EasyApache重建Apache,然后在出现提示时选择所需的PHP版本。

我个人认为PHP开发人员应该更好地警告用户,我的意思是,明确表示升级到5.6版会给非UTF-8就绪网站/应用程序带来特殊字符问题。他们所做的只是将UTF-8强加给全球数百万开发人员的过快或过于激进。

答案 3 :(得分:1)

如果你有多主机网络服务器,特别是旧网站多种语言,为了最大限度地兼容早期的PHP版本,例如5.4在/ etc / php ... / php.ini中重置default_charset值:

在全局[PHP]部分找到此密钥并进行编辑,或者像这样:

default_charset = ""

这不会强制PHP为所有php文件设置UTF-8字符集,尤其是较早的遗留或国家编码,如windows-1251windows-1257iso-8859-1iso-8859-2ISO-8859-13和类似的。

或者如果您是开发人员,请务必使用Rob的答案并直接向您的php应用程序添加代码ini_set("default_charset", "");