Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
更新php打破了德语Codeigniter 1站点中的UTF-8编码_Php_Codeigniter_Encoding_Utf 8 - Fatal编程技术网

更新php打破了德语Codeigniter 1站点中的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

我继承了一个有德语内容的老版Codeigniter 1.0网站。Arg

它运行在一个带有PHP5.2和MySQL 5.0的服务器上

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

例如,它现在显示了数据库中的u

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

有没有什么好主意,我可以在哪里找到这件事发生的地方,并给它一个严厉的谈话?如果您有什么建议,请使用小词,因为我对codeigniter不太了解-D

EDIT1

我将HTML中的字符集设置为utf-8-这一点没有改变。
所有表都有排序规则: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_编码功能修复了德语字符。