Я использую 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
favorites
SETid
= '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. Возможно, записи в базе данных недействительны?