używam CodeIgniter nie tak długo, ale mam pewne problemy charset .. Pytam wokół na Forum CI, ale chcę iść dalej, jeszcze nie globalne rozwiązanie: http://codeigniter.com/forums/viewthread/204409/CodeIgniter i charsets
Problem był błąd bazy danych 1064. Mam rozwiązanie, użyj iconv! Działa dobrze, ale myślę, że to nie jest konieczne. Dużo szukam w Internecie dla zestawu znaków itp., Ale używam CI teraz, a co z zestawami znaków i CI ...
Mam wiele pytań na ten temat, mam nadzieję, że ktoś może to jasno wyjaśnić dla mnie:
Jaki jest najlepszy sposób ustawienia zestawu znaków globalnie? A co ustawić?
W korpusie
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
w konfiguracji/config.php
$config['charset'] = 'UTF-8';
w konfiguracji/Database.php
$db['default']['char_set'] = 'utf8';
$db['default']['dbcollat'] = 'utf8_general_ci';
W .htaccess, moje zasady przepisywania i
php_value magic_quotes_gpc Off
AddDefaultCharset UTF-8
trzeba także wysłać nagłówek? Gdzie umieścić? Coś jak?
header('Content-Type: text/html; charset=UTF-8');
W moim edytora (Notepad ++) Zapisz pliki jako UTF-8? Lub UTF-8 (bez BOM)? A może ANSI jest dobre (to jest to, czego teraz używam)?
Użyj utf8_unicode_ci lub utf8_general_ci dla bazy danych MySQL? I dlaczego?
Co powiesz na czytanie kanałów RSS, jak obsługiwać wiele zestawów znaków? Gdzie pracuję Mam dwa kanały, jeden z kodowaniem UTF-8, a drugi z ISO-8859-1. Zostanie to zapisane w bazie danych i czasami będzie porównywane, aby sprawdzić, czy są nowe pozycje. Nie działa na specjalnych znakach.
pracuję z: - CI 2.0.3 - PHP 5.2.17 - MySQL 5.1.58
Więcej informacji dodania:
Model:
function update_favorite($data)
{
$this->db->where('id', $data['id']);
$this->db->where('user_id', $data['user_id']);
$this->db->update('favorites', $data);
return;
}
Kontroler:
$this->favorites_model->update_favorite(array(
'id' => $id,
'rss_last' => $rss_last,
'user_id' => $this->session->userdata('user_id')
));
Kiedy $ rss_last jest „normalne” wartości takich jak: „test” (bez cudzysłowów) to działa dobrze. Jeżeli jest to wartość z większą długością podobnego (w języku polskim): F-Secure vindt malware spotkał Certyfikat van Maleisische Overheid
otrzymuję ten błąd:
Error Number: 1064
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘vindt malware met certificaat van Maleisische overheid,
user_id
= ‘1’ WHERE `i’ at line 1UPDATE
favorites
SETid
= ‘15’,rss_last
= F-Secure vindt malware met certificaat van Maleisische overheid,user_id
= ‘1’ WHEREid
= ‘15’ ANDuser_id
= ‘1’Filename: /home/.../domains/....nl/public_html/new/models/favorites_model.php
Line Number: 35
Ktoś na forum CI kazał mi użyć tego :
'rss_last' => iconv("UTF-8", "UTF-8//TRANSLIT", $rss_last)
działa to dobrze, ale myślę, że nie jest to konieczne ..
wartość $ rss_last wyszedł RSS, jak powiedział BEF rudy, czasem kodowania UTF-8 i inne razy w ISO-8859-1:
$rss = file_get_contents('http://www.website.com/rss.xml');
$feed = new SimpleXmlElement($rss);
$rss_last = $feed->channel->item[0]->title;
Wygląda na to ostatnia część jest problem, gdy $ rss_last jest ustawiona na wartość to działa dobrze:
$rss_last = 'F-Secure vindt malware met certificaat van Maleisische overheid';
Gdy wartość wyszedł RSS to stwarzać problemy ...
kilka pytań ..
Wystarczy znaleźć to: Detect encoding and make everything UTF-8
Najlepsze rozwiązanie? Ale .. jest iconv nie bardziej proste, zrobić coś takiego:
$encoding = some_function_to_get_encoding_from_feed($feed);
$rss_last = iconv($encoding, "UTF-8//TRANSLIT", $feed->channel->item[0]->title);
ale co do wykorzystania dla "some_function_to_get_encoding_from_feed"? mb_detect_encoding?
I mb_convert_encoding vs iconv?
Do dodania: w twojej funkcji aktualizacji SQL wszystkie paramy się w cudzysłowach za wyjątkiem _rss_last_. Tak, wiem, że generowane przez CI, ale to jest podejrzane. –
_To działa dobrze, ale myślę, że to nie jest konieczne .._ Twoje prawo. –