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

时间:2014-03-20 15:06:25

标签: php codeigniter encoding utf-8

我继承了一个带有德语内容的老年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 在config / database.php中,我有:  $ db ['default'] ['char_set'] =“utf8”; $ db ['default'] ['dbcollat​​'] =“utf8_general_ci”;

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

无论将这些实体重新转换为HTML还能破坏德语字符......?

2 个答案:

答案 0 :(得分:2)

好的,所以你检查了CodeIgniter config charset and UTF-8 support中的所有内容,好吧,让我们深入了解CI,根据这篇文章:http://www.jamipietila.fi/codeigniter-and-utf-8/有三个地方需要研究:

的config.php

$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');

如果没有任何效果,最后一次尝试:如果在所有这些之后,它仍然无法正常工作,请使用带有PDO的简单PHP文件检查以转到DDBB并检索并输出结果。如果使用utf-8,那肯定是INSIDE CI。如果没有,那就是你的服务器,当你改为PHP 5.4时它不喜欢的东西

答案 1 :(得分:0)

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

$ str =!mb_detect_encoding($ str,'UTF-8',TRUE)? utf8_encode($ str):$ str;

$ str = @iconv('UTF-8','UTF-8 // IGNORE',$ str);