更新php会破坏德语Codeigniter 1站点的UTF-8编码


Updating php breaks UTF-8 encoding in German language Codeigniter 1 site

我继承了一个带有德语内容的老Codeigniter 1.0站点。参数。

它运行在php 5.2和MySQL 5.0的服务器上。

更新服务器以使用php 5.4和MySQL 5.5导致字符编码下降到位-我假设Codeigniter正在通过某种过滤器运行数据库内容(这是正确的)。

现在显示,例如,ü数据库中有ü

所有内容都设置为UTF-8,站点本身没有任何变化,尽管数据库当然已经更新。

有没有什么主意,我可以看看这是发生在哪里,并给它一个严厉的谈话?如果你有建议,请使用小字,因为我不太了解codeigniter。: - d

EDIT1

我在HTML中设置了字符集为utf-8 -这没有改变。
所有表都有排序规则:utf8_unicode_ci在配置/database.php,我有:$db['default']['char_set'] = "utf8";$ db("违约")[' dbcollat '] ="utf8_general_ci";

EDIT2 根据Chococroc的建议,我创建了一个测试php文件来直接从数据库中提取数据。这正确地显示了德语字符,但帮助我意识到,在数据库中,HTML被存储为HTML实体——例如,&lt;p&gt;而不是<p>

可能是什么将这些实体转换回HTML也混淆了德国字符…?

好了,你检查了所有CodeIgniter配置字符集和UTF-8支持,好吧,让我们深入CI,根据这篇文章:http://www.jamipietila.fi/codeigniter-and-utf-8/有三个地方可以查看:

config。

$config['charset'] = "UTF-8";

Database.php

$db['default']['char_set'] = "utf8";
$db['default']['dbcollat'] = "utf8_general_ci";

控制器:添加这一行

$this->output->set_header('Content-Type:text/html; charset=UTF-8');

最后一次尝试,如果没有任何工作:如果在所有这些之后,它仍然不工作,检查一个简单的PHP文件与PDO去DDBB和检索和输出结果。如果有了这个utf-8,它肯定是CI内部的东西。如果不是,这是你的服务器,当你切换到PHP 5.4

Codeigniter有utf-8字符输入数据保存问题在一些托管服务器,如Etisalat。system/core/Utf8.php有检测输入数据(post/get)中的非法字符的功能。在某些情况下,utf-8字符被认为是非法的,保存函数将失败。为了避免数据保存问题,请在Utf8.php的第85行clean_string()函数中执行以下操作。

$ str = ! mb_detect_encoding (str美元,"utf - 8",真正的)?Utf8_encode ($str): $str;

$ str = @iconv("utf - 8",utf - 8//忽略,str美元);