我使用Codeigniter的时间不长,但我有一些字符集问题。我在CI论坛上问过,但我想更进一步,仍然没有全球解决方案:http://codeigniter.com/forums/viewthread/204409/
问题是数据库错误1064.我有一个解决方案,使用iconv!工作正常,但我认为没有必要。我在互联网上搜索charset等等,但我现在正在使用CI,如何使用charsets和CI ......
所以我对它提出了很多疑问,我希望有人能为我说清楚:
设置charset全局的最佳方法是什么?什么设置?
在头脑中
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
在config / config.php中
$config['charset'] = 'UTF-8';
在config / database.php
中 $db['default']['char_set'] = 'utf8';
$db['default']['dbcollat'] = 'utf8_general_ci';
在.htaccess中,我的重写规则和
php_value magic_quotes_gpc Off
AddDefaultCharset UTF-8
还需要发送标题吗?在哪里放置?有点像?
header('Content-Type: text/html; charset=UTF-8');
在我的编辑器(Notepad ++)中将文件保存为UTF-8?还是UTF-8(没有BOM)?或者ANSI是好的(这是我现在使用的)?
对MySQL数据库使用utf8_unicode_ci或utf8_general_ci?为什么?
如何阅读RSS源,如何处理多个字符集?在我正在研究的地方,我有两个输入,一个使用UTF-8编码,另一个使用ISO-8859-1。这将存储在数据库中,有时会进行比较以查看是否有新项目。它在特殊字符上失败。
我正在与: - CI 2.0.3 - PHP 5.2.17 - MySQL 5.1.58
添加了更多信息:
型号:
function update_favorite($data)
{
$this->db->where('id', $data['id']);
$this->db->where('user_id', $data['user_id']);
$this->db->update('favorites', $data);
return;
}
控制器:
$this->favorites_model->update_favorite(array(
'id' => $id,
'rss_last' => $rss_last,
'user_id' => $this->session->userdata('user_id')
));
当$ rss_last是一个“正常”值时,如:“test”(没有引号),它可以正常工作。 当它是一个更长的值(荷兰语):F-Secure vindt恶意软件遇到了证书van Maleisische overheid
我收到此错误:
错误号码:1064
您的SQL语法有错误;检查手册 对应于您的MySQL服务器版本,以便使用正确的语法 靠近'vindt恶意软件遇到certificaat van Maleisische overheid,
user_id
='1'在第1行的“我”更新
favorites
设置id
='15',rss_last
= F-Secure vindt 恶意软件遇到了certificaat van Maleisische overheid,user_id
='1' WHEREid
='15'和user_id
='1'文件名: /家庭/.../域/ .... NL /的public_html /新/模型/ favorites_model.php
行号:35
CI论坛的某个人告诉我使用它:
'rss_last' => iconv("UTF-8", "UTF-8//TRANSLIT", $rss_last)
这很好用,但我认为没有必要..
值$ rss_last出现了一个RSS提要,如前所述,有时是UTF-8,有时是ISO-8859-1编码:
$rss = file_get_contents('http://www.website.com/rss.xml');
$feed = new SimpleXmlElement($rss);
$rss_last = $feed->channel->item[0]->title;
看起来这最后一部分就是问题,当$ rss_last被设置为它正常工作的值时:
$rss_last = 'F-Secure vindt malware met certificaat van Maleisische overheid';
当价值出现时,它会给出问题......
更多问题..
刚刚发现:Detect encoding and make everything UTF-8
最佳解决方案?但是.. iconv不是更简单,做这样的事情:
$encoding = some_function_to_get_encoding_from_feed($feed);
$rss_last = iconv($encoding, "UTF-8//TRANSLIT", $feed->channel->item[0]->title);
但是什么用于“some_function_to_get_encoding_from_feed”? mb_detect_encoding?
和mb_convert_encoding vs iconv?
答案 0 :(得分:4)
1)没有全球解决方案。
2)
AddDefaultCharset UTF-8
Apache需要正确编码才能响应客户端。成功。
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
不一定,但W3C推荐。
$config['charset'] = 'UTF-8';
这是可取的
$db['default']['char_set'] = 'utf8';
$db['default']['dbcollat'] = 'utf8_general_ci';
用于CI连接到数据库的编码。如果您的数据库的编码是UTF-8 - 强制它。
header('Content-Type: text/html; charset=UTF-8');
除非必要,否则不要这样做。 Charset已在HTML代码和.htaccess中表示。
Use utf8_unicode_ci or utf8_general_ci for the MySQL database? And why?
对于他们自己的语言(俄语),我使用utf8_general_ci。
In my editor (Notepad++) save files as UTF-8?
绝对! Apache将以UTF8格式提供的所有代码都应采用UTF8格式。
How about reading RSS feeds, how to handle multiple charsets?
如果每个表中都有RSS,则可以为每个表指定charset,并为每个sql查询设置正确的编码。 是的,例如,西里尔符号将在非UTF8上失败。
答案 1 :(得分:1)
UTF-8(无BOM)应根据您的配置为您提供最佳结果,并且无需发送单独的标头,因为已在头部选择了编码。 Utf8_general_ci应该可以为MySQL数据库做好。 也许数据库中的条目无效?