Я использую Codeigniter не так долго, но у меня есть некоторые проблемы с кодировкой. Я спрашиваю об этом на Форуме CI, но я хочу идти дальше, но не глобальное решение: http://codeigniter.com/forums/ viewthread / 204409 /
Проблема была ошибка базы данных 1064. У меня есть решение, используйте iconv! Хорошо работает, но я думаю, что это не обязательно. Я много ищу в Интернете для charset и т. Д., Но теперь я использую CI, как насчет кодировок и CI …
Поэтому у меня есть много вопросов об этом, я надеюсь, что кто-то может понять это для меня:
Каков наилучший способ установить глобальную кодировку? А что задавать?
В голове
<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 (без спецификации)? Или ANSI хорошо (это то, что я использую сейчас)?
Использовать utf8_unicode_ci или utf8_general_ci для базы данных MySQL? И почему?
Как насчет чтения 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 malware встретил сертифицированный van Maleisische overheid
Я получаю эту ошибку:
Номер ошибки: 1064
У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса, используемого рядом с 'vindt malware met certifiedaat van Maleisische overheid,
user_id=' 1 'WHERE `i' в строке 1UPDATE
favoritesSETid= '15',rss_last= F-Secure vindt malware met certifiedaat 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 vs iconv?
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 в каждой таблице, вы можете указать кодировку для каждой таблицы и задать правильную кодировку с каждым SQL-запросом. Да, например, кириллические символы будут терпеть неудачу на не-UTF8.
UTF-8 (без спецификации) должен дать вам наилучшие результаты на основе вашей конфигурации, и нет необходимости отправлять отдельные заголовки, поскольку кодировка уже выбрана в головной части. Utf8_general_ci должен отлично работать для базы данных MySQL. Возможно, записи в базе данных недействительны?