He visto y sido victima de los problemas que generan los acentos en sistemas web, llevo un tiempo usando CodeIgniter como framework de desarrollo para PHP, por ventajas que algunos ya conocerán, pero que no son el motivo del post (aunque es verdad tiene sus pro y contras, hoy les hablo de un pro), el punto es GUARDAR Y MOSTRAR ACENTOS en una página web, lo cual es sumamente sencillo, solo tienen que configurar su archivo system/application/database.php de forma correcta, lo cual depende de la configuracion de su base de datos, veamos un ejemplo:
Aqui tenemos que nuestra base de datos usa el cotejamiento de caracteres latin1_swedish_ci al igual que nuestra tabla:
Entonces debemos poner nuestra configuracion de la siguiente manera(solo muestro la parte importante lo demás dependeria de su base de datos, usuario,etc):
$db['default']['char_set'] = "latin1"; $db['default']['dbcollat'] = "latin1_swedish_ci";
Que es la configuracion de nuestra base de datos. Esto como pueden ver es muy sencillo, si alguien sabe hacerlo en php duro y puro pues comente o postee mejor registrarse no cuesta, en realidad no se que tan dificil sea, pero yo no le investigado.
También podria ser necesario que cambienalgo en el archivo system/application/config.php pero a mi me funcionó sin hacerlo todo depende ocm odice el comentario, si se usan metodos que requieren de un charset
/* |-------------------------------------------------------------------------- | Default Character Set |-------------------------------------------------------------------------- | | This determines which character set is used by default in various methods | that require a character set to be provided. | */ $config['charset'] = "latin1";
Esta es una alternativa a quienes tienen problemas usando htmlentities o la funcion de utf8_decode() (y su contraparte utf8_encode()), ah y no olviden indicar en el header de su pagina que juego de caracteres están usando, para que los muestre correctamente, para este caso seria el iso-8859-1, hasta ahora no he tenido mayores problemas asi que si están desesperados pueden intentar esta opción (debo suponer que no es forzoso el uso de codeigniter, pero como dije antes yo no se hacerlo en php, y de nuevo los invito a participar).
Si gustan probar solo creen un controlador con el nombre de guardaracentos.php en la carpeta controllers aqui está el fuente de ese controlador:
load->helper('form');
$this->load->database();
}
function guardar(){
extract($_POST);
$insertar = $this->db->query("UPDATE pruebas SET acentos='$acentos' where id=1;");
$sacar = $this->db->query("SELECT acentos from pruebas where id=1;");
$acentosdb = $sacar->row();
$mensajes = array('mensaje' => 'Mostramos con un simple echo ni utf_decode ni htmlentities tal cual es guardado y mostrado', 'mensaje2' => $acentosdb->acentos);
$this->load->view("welcome_message", $mensajes);
}
}
?>
y pueden utilizar la vista de ejemplo que trae codeigniter welcome_message.php con el siguiente codigo:
Welcome to CodeIgniterGuardando acentos
'acentos','name' => 'acentos'); echo form_open('guardaracentos/guardar'); echo "Ingresa un string con acentos:".form_input($atributosForm, 'Usa acentos'); echo form_submit("guardar","Guardar"); echo form_close(); if ((isset ($mensaje)) and (isset($mensaje2))) echo "".$mensaje."
. ".$mensaje2." "; ?>
Y de una vez la tabla que usé:
| Table | Create Table
|
+---------+-----------------------------------------------
----------------------------------------------------------
--------------------------------+
| pruebas | CREATE TABLE `pruebas` (
`id` tinyint(4) NOT NULL auto_increment,
`acentos` varchar(10) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=latin1 |
[ad#vertical6posts]

hola, muy bueno el blog,si lo deseas,ingresaa mi pagina, a publicar un comentario, saludos
base de datos de usuarios de tarjetas de credito y debito
http://tvinternet08.blogspot.com/
Muy bueno el blog, dejame un comentario en mi blog.
Saludos.
jajajaj simon yo tube problemas al extraer de mysql los acentos y tuve que utilizar el utf8decode() con el juego de caracteres iso-8859-1, y con eso funciono, pero pues como soy novato en esto del php jeje, pues voy a probar esto que me cuentas gracias
Hola, interesante tu blog.
Ahora bien, en cuanto a los problemas de acentos y/o caracteres no comunes, no tienes que hacerle ningun cambio a los archivos de CI, de igual forma el $config['charset'] = “latin1″; no es exactamente “latin de latino de america altina..”, no se si me explico, pero igual el charset correcto para cualquier situacion es uft8_general_ci, el cual tampoco tienes que especificarlo en el config de CodeIgniter, la solucion es mas sencilla de lo que pensamos.
1.- La base de datos debe tener como collaction y charset (hablando de mysql) uft8_general_ci, con eso es suficiente.
2.- Lo siguente es mas importante que el mismo charset de la base de datos, los views o archivos html deben ser archivos w3c validos, por suerte Dreamweaver genera todo el codigo que se necesita y no hay que estar pendiente de ello, pero una muestra seria lo siguiente:
Untitled Document
esa cabecera del html es un tipo DTD valido, y con esto es suficiente, notense las partes importantes:
con la especificacion de charset=utf-8 esta solucionado el problema de acentos, es algo mas facil de lo pensado, ya que el mismo html te soluciona ese problema.
Saludos y buen blog.
Perdon, veo que el html no se pego…
<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Strict//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd”>
<html xmlns=”http://www.w3.org/1999/xhtml”>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″ />
Gracias por la respuesta Asinox