我继承了一个带有德语内容的老年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实体 - 例如<p>
而不是<p>
。
无论将这些实体重新转换为HTML还能破坏德语字符......?
答案 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);