sto usando Codeigniter non per tanto tempo, ma ho alcuni problemi charset .. Sto chiedendo attorno al Forum CI, ma voglio andare oltre, ancora una soluzione globale: http://codeigniter.com/forums/viewthread/204409/Codeigniter e set di caratteri
Il problema era un errore del database 1064. Ho una soluzione, usa iconv! Funziona bene, ma penso che non sia necessario. Sto cercando molto su internet per charset ecc, ma sto usando CI ora, che ne dici di charset e CI ...
Quindi ho un sacco di domande a riguardo, spero che qualcuno possa chiarire per me:
Qual è il modo migliore per impostare il set di caratteri globale? E cosa impostare?
Nella testa
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
In config/config.php
$config['charset'] = 'UTF-8';
In config/database.php
$db['default']['char_set'] = 'utf8';
$db['default']['dbcollat'] = 'utf8_general_ci';
In .htaccess, le mie regole di riscrittura e
php_value magic_quotes_gpc Off
AddDefaultCharset UTF-8
anche bisogno di inviare un colpo di testa? Dove collocare? Qualcosa di simile a?
header('Content-Type: text/html; charset=UTF-8');
nel mio editor (Notepad ++) salvare i file come UTF-8? O UTF-8 (senza BOM)? O è ANSI buono (questo è quello che sto usando ora)?
Utilizzare utf8_unicode_ci o utf8_general_ci per il database MySQL? E perché?
Che ne dici di leggere i feed RSS, come gestire più set di caratteri? Dove sto lavorando ho due feed, uno con codifica UTF-8 e l'altro con ISO-8859-1. Questo verrà memorizzato nel database e verrà confrontato a volte per vedere se ci sono nuovi elementi. Fallisce su caratteri speciali.
Sto lavorando con: - CI 2.0.3 - PHP 5.2.17 - MySQL 5.1.58
Maggiori informazioni aggiunto:
Modello:
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')
));
Quando $ rss_last è un valore “normale” come: “test” (senza virgolette) funziona bene. Quando è un valore con più di lunghezza simile (in olandese): F-Secure vindt di malware incontrato certificaat van Maleisische overheid
ottengo questo errore:
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
Qualcuno al forum CI mi ha detto di utilizzare questo :
'rss_last' => iconv("UTF-8", "UTF-8//TRANSLIT", $rss_last)
questo funziona bene, ma penso che questo non è necessario ..
Il valore $ rss_last è venuto fuori un feed RSS, come detto BEF minerale, a volte un UTF-8 e altre volte a ISO-8859-1 codifica:
$rss = file_get_contents('http://www.website.com/rss.xml');
$feed = new SimpleXmlElement($rss);
$rss_last = $feed->channel->item[0]->title;
Sembra che questa ultima parte è il problema, quando $ rss_last è impostato sul valore che funziona bene:
$rss_last = 'F-Secure vindt malware met certificaat van Maleisische overheid';
Quando il valore è venuto fuori l'RSS è dare problemi ...
Alcune altre domande ..
appena trovato questo: Detect encoding and make everything UTF-8
La migliore soluzione? Ma .. è iconv non di più semplice, fare qualcosa di simile:
$encoding = some_function_to_get_encoding_from_feed($feed);
$rss_last = iconv($encoding, "UTF-8//TRANSLIT", $feed->channel->item[0]->title);
Ma cosa usare per "some_function_to_get_encoding_from_feed"? mb_detect_encoding?
E mb_convert_encoding vs iconv?
Per il vostro aggiunto: nella funzione SQL Update tutti i parametri sono tra virgolette eccetto _rss_last_. Sì, lo so che generato da CI, ma questo è sospetto. –
_Questo funziona bene, ma penso che questo non sia necessario .._ Il tuo diritto. –