所以我有很多问题,希望有人能为我澄清:
最好的设置全局字符集的方法是什么?应该设置什么?
- 在头部 - 在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;
}
Controller:
$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 malware met certificaat van Maleisische overheid
我收到了这个错误:
错误编号:1064
您的SQL语法有误;请检查与您的MySQL服务器版本对应的手册以获取正确的语法,位于第1行附近'vindt malware met certificaat van Maleisische overheid,
user_id
='1' WHERE `i'UPDATE
favorites
SETid
= '15',rss_last
= F-Secure vindt malware met certificaat van Maleisische overheid,user_id
='1' WHEREid
='15' ANDuser_id
='1'文件名: /home/.../domains/....nl/public_html/new/models/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';
当值从RSS中返回时,它会出现问题...
还有一些问题...
刚发现这个:检测编码并将所有内容转换为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和iconv两者有什么区别呢?