2012-08-28 39 views
5

Estoy trabajando en un sitio web que usa/almacena caracteres acentuados en la base de datos. Tengo el conjunto de plantilla de página para que el config.php variable de conjunto de caracteres coincide con la configuración, por ejemplo:CodeIgniter config charset y soporte UTF-8

<meta charset="<?php echo $this->config->item('charset');?>"> 

El problema que estoy teniendo es que cuando se pone a $config['charset']UTF-8, la forma la validación falla y es como si no se hubieran enviado caracteres si se hubiera incluido un carácter acentuado. Entonces, por ejemplo, un campo requerido se recuperará si se incluye á en cualquier parte de la cadena. La cadena menos el á funciona bien.

he logrado conseguir este trabajo cambiando el $config['charset'] a ISO-8859-1 y la conversión de texto a UTF-8 antes de insertar/después de recuperar de la base de datos con php de utf8_encode() y utf8_decode(). ¿Es esta la mejor manera o me falta algo necesario para obtener UTF-8, con caracteres acentuados, trabajando en CodeIgniter?

Cualquier consejo apreciado.

+0

Asegúrese de configurar en todas partes UTF-8. Es difícil decir qué va mal, pero probablemente en algún momento tengas un conjunto de caracteres diferente. Debe leer: http://www.joelonsoftware.com/articles/Unicode.html. – Styxxy

Respuesta

12

Debe asegurarse de usar UTF-8 en todas partes y de que tanto PHP como MySQL están configurados para manejar UTF-8.

En el HTML, añada el meta-tag:

<meta charset="utf-8" /> 

y guardarlo en formato UTF-8. aquí está how to do that in notepad++.

Definir las tablas de MySQL para apoyar UTF-8, crear la tabla con:

DEFAULT CHARSET=utf8; 

y establecer la conexión con:

mysql_set_charset('utf8', $con); 

Enable UTF-8 en el php.ini:

default_charset = "utf-8" 

Para una verificación manual completa Handling Unicode Front To Back In A Web App

+0

Muchas gracias por la respuesta y el enlace. Verificaré que UTF-8 se utilice en todo momento. El problema de validación de formulario se debía a que $ config ['charset'] se configuraba como 'UTF-8' (todo en mayúsculas) en lugar de 'utf-8' (todo en minúsculas). Por algún motivo, la configuración predeterminada para que este sea mayúscula 'UTF-8' no funciona (al menos no en mi configuración). –

+0

genial, feliz de ayudar :) +1 – Kuf

+0

Pequeño comentario para las personas que lo encontraron en google - fuente alternativa de este problema podría ser la codificación de la tabla _o columna_ (sí, cambiar la codificación de la tabla no cambia la codificación de las columnas individuales) - en ese caso, el valor de edición dentro de una columna con cadena UTF-8 daría como resultado una advertencia de "Valor de cadena incorrecta", que no es visible cuando simplemente ejecuta la consulta a través de codeigniter. Todo lo que verá es? en lugar de UTF-8 char . – MarcinWolny