estoy usando CodeIgniter no durante tanto tiempo pero he algunos problemas charset .. voy preguntando en el Foro de CI, pero yo quiero ir más lejos, todavía no hay solución global: http://codeigniter.com/forums/viewthread/204409/CodeIgniter y juegos de caracteres
El problema fue un error de base de datos 1064. Tengo una solución, ¡use iconv! Funciona bien, pero creo que no es necesario. Estoy buscando mucho en Internet para charset, etc. pero estoy usando CI ahora, ¿qué hay de conjuntos de caracteres y CI?
Así que tengo muchas preguntas al respecto, espero que alguien pueda dejarlo claro para mí:
¿Cuál es la mejor manera de establecer el conjunto de caracteres global? ¿Y qué poner?
En la cabeza
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
En config/config.php
$config['charset'] = 'UTF-8';
En config/database.php
$db['default']['char_set'] = 'utf8';
$db['default']['dbcollat'] = 'utf8_general_ci';
En .htaccess, mis reglas de reescritura y
php_value magic_quotes_gpc Off
AddDefaultCharset UTF-8
también necesita enviar una cabecera? ¿Dónde colocar? ¿Algo como?
header('Content-Type: text/html; charset=UTF-8');
En mi editor (Notepad ++) guardar archivos como UTF-8? ¿O UTF-8 (sin BOM)? ¿O es bueno ANSI (esto es lo que estoy usando ahora)?
Utilice utf8_unicode_ci o utf8_general_ci para la base de datos MySQL? ¿Y por qué?
¿Qué tal leer feeds RSS, cómo manejar múltiples conjuntos de caracteres? Donde estoy trabajando tengo dos fuentes, una con codificación UTF-8 y la otra con ISO-8859-1. Esto se almacenará en la base de datos y se comparará a veces para ver si hay nuevos elementos. Falla en caracteres especiales.
estoy trabajando con: - IC 2.0.3 - PHP 5.2.17 - MySQL 5.1.58
Más información añadida:
Modelo:
function update_favorite($data)
{
$this->db->where('id', $data['id']);
$this->db->where('user_id', $data['user_id']);
$this->db->update('favorites', $data);
return;
}
controlador:
$this->favorites_model->update_favorite(array(
'id' => $id,
'rss_last' => $rss_last,
'user_id' => $this->session->userdata('user_id')
));
Cuando $ rss_last es un valor “normal” como: “prueba” (sin comillas) funciona bien. Cuando se trata de un valor de más de longitud similar (en holandés): el malware vindt F-Secure se reunió Certificado de Maleisische overheid
consigo este error:
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
Alguien en el foro CI me dijo que usara este :
'rss_last' => iconv("UTF-8", "UTF-8//TRANSLIT", $rss_last)
esto funciona bien, pero creo que esto no es necesario ..
El valor $ rss_last salió un canal RSS, según lo dicho BEF mineral, a veces un UTF-8 y otras veces a la codificación ISO-8859-1:
$rss = file_get_contents('http://www.website.com/rss.xml');
$feed = new SimpleXmlElement($rss);
$rss_last = $feed->channel->item[0]->title;
Parece que esta última parte es el problema, cuando $ rss_last se establece en el valor que funciona bien:
$rss_last = 'F-Secure vindt malware met certificaat van Maleisische overheid';
Cuando el valor salió de la RSS se dan problemas ...
Algunas preguntas más ..
acaba de encontrar esto: Detect encoding and make everything UTF-8
¿La mejor solución? Pero .. es iconv no más simple, hacer algo como esto:
$encoding = some_function_to_get_encoding_from_feed($feed);
$rss_last = iconv($encoding, "UTF-8//TRANSLIT", $feed->channel->item[0]->title);
Pero lo que para usar de "some_function_to_get_encoding_from_feed"? mb_detect_encoding?
Y mb_convert_encoding vs iconv?
Para su agregado: en su función de actualización de SQL, todos los parámetros están entre comillas excepto _rss_last_. Sí, sé que fue generado por CI, pero esto es sospechoso. –
_Esto funciona bien, pero creo que esto no es necesario .._ Su derecho. –