Codeigniter и кодировки

Я использую 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' в строке 1

UPDATE favorites SET id = '15', rss_last = F-Secure vindt malware met certifiedaat van Maleisische overheid, user_id = '1' WHERE id = '15' AND user_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. Возможно, записи в базе данных недействительны?