更新php打破了德语Codeigniter 1站点中的UTF-8编码
我继承了一个有德语内容的老版Codeigniter 1.0网站。Arg 它运行在一个带有PHP5.2和MySQL 5.0的服务器上 更新服务器以使用PHP5.4和MySQL 5.5导致字符编码下降到位-我假设Codeigniter正在通过某种过滤器运行数据库内容(这是正确的) 例如,它现在显示了数据库中的u 所有内容都设置为UTF-8,站点本身没有任何更改,当然数据库已经更新 有没有什么好主意,我可以在哪里找到这件事发生的地方,并给它一个严厉的谈话?如果您有什么建议,请使用小词,因为我对codeigniter不太了解-D EDIT1 我将HTML中的字符集设置为utf-8-这一点没有改变。更新php打破了德语Codeigniter 1站点中的UTF-8编码,php,codeigniter,encoding,utf-8,Php,Codeigniter,Encoding,Utf 8,我继承了一个有德语内容的老版Codeigniter 1.0网站。Arg 它运行在一个带有PHP5.2和MySQL 5.0的服务器上 更新服务器以使用PHP5.4和MySQL 5.5导致字符编码下降到位-我假设Codeigniter正在通过某种过滤器运行数据库内容(这是正确的) 例如,它现在显示了数据库中的u 所有内容都设置为UTF-8,站点本身没有任何更改,当然数据库已经更新 有没有什么好主意,我可以在哪里找到这件事发生的地方,并给它一个严厉的谈话?如果您有什么建议,请使用小词,因为我对code
所有表都有排序规则:utf8\U unicode\U ci 在config/database.php中,我有: $db['default']['char\u set']=“utf8”; $db['default']['dbcollat']=“utf8\u常规\u ci” EDIT2 正如Chococroc所建议的,我创建了一个测试php文件,直接从数据库中提取数据。这正确地显示了德语字符,但帮助我认识到,在数据库中,HTML被存储为HTML实体-
p
,而不是
是否将这些实体转换回HTML也会损坏德语字符…?好的,那么您已经全部签入,好吧,根据这篇文章,让我们深入研究CI:有三个地方需要研究:
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能够工作,那么肯定是CI内部的一些东西。如果不是,那就是您的服务器,当您更改为PHP5.4时,它不喜欢这种情况。Codeigniter在某些托管服务器(如Etisalat)中存在utf-8字符输入数据保存问题。system/core/Utf8.php具有检测输入数据中非法字符的功能(post/get)。在某些情况下,UTF-8字符被认为是非法的,并且保存函数将失败。为了避免数据保存问题,请在第85行的Utf8.php的clean_string()函数中执行以下操作 $str=!mb_检测编码($str,'UTF-8',TRUE)?utf8_编码($str):$str
$str=@iconv('UTF-8','UTF-8//IGNORE',$str) 只是要放弃它,它不是从视图中删除的,您希望在页眉中显示的页面是否存在?更多信息,您是否检查了此答案,我想我已经检查了所有这些,但是非常感谢你的尝试,我会用这些额外的细节更新我的问题。嗯。。。我用一些CI配置进行了回答,检查其中的任何一行是否有效我已经在config.php和database.php中找到了这些行,但是我不清楚在控制器中应该放在哪里-我把它放在/Controllers/home.php和/Controllers/page.php中,作为函数show_page()和函数index()中的一行-对吗?如果是这样,唉,那就没用了。我试着用php直接从数据库中提取字段,结果德语字符显示正确。这意味着它必须在CI内部…?好的,将数据库记录拉到CI外部的文件中真的很有帮助-我意识到数据库中的HTML是作为实体存储的,因此,必须有一些东西将这些实体转换回HTML。这让我想到了html_实体_解码,通过查找实例,我发现utf8_编码和html_实体_解码一样被使用。删除utf8_编码功能修复了德语字符。