elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
28 Mayo 2012, 04:42  


Tema destacado: Grupo de Facebook de elhacker.net

+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP
| | | |-+  Problema con Acentos en MySQL + PHP
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 3 Ir Abajo Respuesta Imprimir
Autor Tema: Problema con Acentos en MySQL + PHP  (Leído 10,483 veces)
Skeletron


Desconectado Desconectado

Mensajes: 1.686


A long way to go


Ver Perfil WWW
Problema con Acentos en MySQL + PHP
« en: 11 Marzo 2010, 06:01 »

Hola gente...
Resulta que hice un sistema de esos para seleccionar un pais, luego una region y luego una localidad de esta region.

La cuestion, es que cuando el usuario selecciona una region, la web recarga y debe aparecer la region que se ha seleccionado, como "SELECTED"
Hago un SELECT a la base de datos, donde traigo el NOMBRE de las regiones, y hago ésto para que aparezca SELECTADA la region seleccionada:

Código
if($row['nombre']==$_SESSION['region']){
   echo '<option selected value="'.$row['nombre'].'">'.$row['nombre'].'</option>';
}else{
   echo '<option value="'.$row['nombre'].'">'.$row['nombre'].'</option>';
}

Como verán, en una variable de sesion, guardo el valor que seleccionó anteriormente..

La cuestion, es que esto funciona PERFECTAMENTE.. Pero para paises, regiones o localidades con acento, NO FUNCIONA..

Prueben entrar aqui: www.bropic.com
Arriaba a la izquierda de la web, le muestra las 3 varibales de session..
Seleccionen Argentina - Córdoba
Y veran que no funciona..
Pero si Seleccionan Argentina - Buenos Aires... Si funciona

Leí por ahí que es un problema del CHARSET de MySQL... es así?


En línea

Spider-Net


Desconectado Desconectado

Mensajes: 1.052


Un gran poder conlleva una gran responsabilidad


Ver Perfil WWW
Re: Problema con Acentos en MySQL + PHP
« Respuesta #1 en: 11 Marzo 2010, 08:29 »

Yo como value utilizaría el identificador del país en lugar del nombre para evitarte este tipo de problemas. Y para que se muestre bien el nombre con acentos puedes usar htmlentities. De modo que quedaría algo así:

Código
if($row['nombre']==$_SESSION['region']){
   echo '<option selected value="'.$row['idpais'].'">'.htmlentities($row['nombre']).'</option>';
}else{
   echo '<option value="'.$row['idpais'].'">'.htmlentities($row['nombre']).'</option>';
}
 


En línea

"Si cuando hablas nadie se molesta, eso es que no has dicho absolutamente nada."
^Tifa^


Desconectado Desconectado

Mensajes: 2.802


Ver Perfil
Re: Problema con Acentos en MySQL + PHP
« Respuesta #2 en: 11 Marzo 2010, 13:29 »

Tiene una gran probabilidad de que sea asi  :rolleyes:

Que CHARSET tiene esa tabla donde buscas esa info????  Por lo general lo dejan en utf8

Haz un SHOW CREATE TABLE nombre_tabla;

Que charset tiene????

Puedes cambiarselo por latin1 por ejemplo:

ALTER TABLE nombre_tabla CHARSET = latin1;



En línea
Skeletron


Desconectado Desconectado

Mensajes: 1.686


A long way to go


Ver Perfil WWW
Re: Problema con Acentos en MySQL + PHP
« Respuesta #3 en: 11 Marzo 2010, 18:30 »

El problema parece que no lo explique bien:

En ese codigo que pegué, en la sentencia: $row['nombre']==$_SESSION['region']

la comparacion no funciona bien.
Eso hace que, cuando se seleccione Córdoba, y el mysql_fetch_array devuelve la entrada Cordoba, lo que ahce, es imprimir el "Option" de HTML, pero SELECTADO.. así aparece ese como que fue el ultimo seleccionado.
Se entiende?

Sino, selecciona algun pais, mira que la web se recarga, y al recargarse, mira que aparece seleccionada la que seleccionaste... Eso se ahce con ese algoritmo.

El show create table dice:
CREATE TABLE `regiones` (
 `id` smallint(4) unsigned NOT NULL auto_increment,
 `id_pais` tinyint(3) unsigned NOT NULL default '0',
 `nombre` varchar(150) NOT NULL,
 PRIMARY KEY  (`id`,`id_pais`)
) ENGINE=MyISAM AUTO_INCREMENT=4230 DEFAULT CHARSET=latin1
En línea

^Tifa^


Desconectado Desconectado

Mensajes: 2.802


Ver Perfil
Re: Problema con Acentos en MySQL + PHP
« Respuesta #4 en: 11 Marzo 2010, 19:02 »

Ahhh eso es ya otro problemita amigo  :rolleyes:  y no tan relacionado con MySQL como tal (la tabla tiene el charset LATIN por lo que los registros deben tener acentos).

Es mas un problema entre PHP y programacion ;)
En línea
~ Yoya ~
Wiki

Desconectado Desconectado

Mensajes: 954



Ver Perfil
Re: Problema con Acentos en MySQL + PHP
« Respuesta #5 en: 11 Marzo 2010, 19:21 »

Bueno, tienes que usar el juego de caracter iso-8859-1, ejemplo:
Código
<?php
header('Content-Type: text/html; charset=iso-8859-1');
............
..........
.....
...
..
.
?>
 
O de esta forma:
Código
<?php
header('Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
'
);
...........
.
.
?>

Recuerda que debes enviarlo al principio del code.

Info:
http://en.wikipedia.org/wiki/List_of_HTTP_headers
http://es.wikipedia.org/wiki/ISO_8859-1



Tambien puedes saber el juego de caracter predeterminado en tu Base de Datos, puedes usar este code que postee en Undersecurity...
Código
<?php
//Conexion mysql
$conexion= mysql_connect('localhost','root','pass');
echo "El juego de caracter en la base de dato es: ".mysql_client_encoding($conexion);
 
?>

Salida:
Código:
El juego de caracter en la base de dato es: latin1

Saludos.
« Última modificación: 11 Marzo 2010, 19:24 por ~ Yoya ~ » En línea

Skeletron


Desconectado Desconectado

Mensajes: 1.686


A long way to go


Ver Perfil WWW
Re: Problema con Acentos en MySQL + PHP
« Respuesta #6 en: 12 Marzo 2010, 00:53 »

Yo en el archivo INDEX.php tengo:
header('Content-Type: text/html; charset=UTF-8');

Y desde PHP hago un include a un php llamado: PREFERENCIA.php, donde en él esta éste codigo que da el problema.

Con tener ese HEADER en el index ya es basta?
« Última modificación: 12 Marzo 2010, 00:56 por Skeletron » En línea

~ Yoya ~
Wiki

Desconectado Desconectado

Mensajes: 954



Ver Perfil
Re: Problema con Acentos en MySQL + PHP
« Respuesta #7 en: 12 Marzo 2010, 00:55 »

Tienes que mandar el juego de caracter iso-8859-1 para que acepte las tildes, las ñ, etc...
« Última modificación: 12 Marzo 2010, 00:56 por ~ Yoya ~ » En línea

Skeletron


Desconectado Desconectado

Mensajes: 1.686


A long way to go


Ver Perfil WWW
Re: Problema con Acentos en MySQL + PHP
« Respuesta #8 en: 12 Marzo 2010, 00:58 »

La sentencia que me dijiste que ejecute, dió el siguiente resultado:


El juego de caracter en la base de dato es: latin1
En línea

Skeletron


Desconectado Desconectado

Mensajes: 1.686


A long way to go


Ver Perfil WWW
Re: Problema con Acentos en MySQL + PHP
« Respuesta #9 en: 12 Marzo 2010, 01:00 »

La solucion de HEADER que me propones, empeora las cosas..
Ahora empieza a mostrar textos así:

elige tu puntuación y verás la proxima
En línea

Skeletron


Desconectado Desconectado

Mensajes: 1.686


A long way to go


Ver Perfil WWW
Re: Problema con Acentos en MySQL + PHP
« Respuesta #10 en: 12 Marzo 2010, 01:16 »

Tiene una gran probabilidad de que sea asi  :rolleyes:

Que CHARSET tiene esa tabla donde buscas esa info????  Por lo general lo dejan en utf8

Haz un SHOW CREATE TABLE nombre_tabla;

Que charset tiene????

Puedes cambiarselo por latin1 por ejemplo:

ALTER TABLE nombre_tabla CHARSET = latin1;

Latin1 acepta acentos y demas?
Es muy extraño el problema. Me esta trabando todo el proyecto. Y no quiero solucionarlo eliminando los acentos..


Aca les muestro imganes:
Cotejamiento de tablas:


Cotejamiento general de MySQL:
« Última modificación: 12 Marzo 2010, 01:25 por Skeletron » En línea

Skeletron


Desconectado Desconectado

Mensajes: 1.686


A long way to go


Ver Perfil WWW
Re: Problema con Acentos en MySQL + PHP
« Respuesta #11 en: 12 Marzo 2010, 01:36 »

Noticia de Ultimo momento:
(perdon por el cuadruple posteo)

Miren ésto:
La palabra Córdoba en PHP aparece perfectamente, pero dentro de la tabla veo que no existe... Solamente el Cordoba sin acento de Venezuela...

Entonces miro las regiones de Argentina, y vean:


Como puedo hacer para que esos datos aprezcan como deban??
deberia ejecutar una sentencia que convierta los caracteres de esa forma a normales.. Cual es?
En línea

Nakp
casi es
Ex-Staff
*
Desconectado Desconectado

Mensajes: 6.334

he vuelto :)


Ver Perfil WWW
Re: Problema con Acentos en MySQL + PHP
« Respuesta #12 en: 12 Marzo 2010, 02:39 »

la palabra esta coon html entities

Córdoba != C&oacute;rdoba... como la tenes en la bd, vas a tener que arreglar esa tabla a mano o con algun script que pase de htmlentities a caracteres normales
En línea

Ojo por ojo, y el mundo acabará ciego.
Skeletron


Desconectado Desconectado

Mensajes: 1.686


A long way to go


Ver Perfil WWW
Re: Problema con Acentos en MySQL + PHP
« Respuesta #13 en: 12 Marzo 2010, 03:14 »

Que hermoso quilombo entonces.
No hay algun funcion MySQL?

Tendre que buscar la htmlentities inversa entonces


Leí por ahí que es esta:
html_entity_decode()
« Última modificación: 12 Marzo 2010, 03:19 por Skeletron » En línea

Skeletron


Desconectado Desconectado

Mensajes: 1.686


A long way to go


Ver Perfil WWW
Re: Problema con Acentos en MySQL + PHP
« Respuesta #14 en: 12 Marzo 2010, 03:42 »

Perfecto.
Acabo de modificar todo.. Esta todo listo :)

Ahora, me pregunto:
Porque aparecen los caracteres en PHP con ese triangulito negro con el ? adentro?

Me esta volviendo loco el tema de que los textos anden mal y los textos traidos de la database anden bien!!...


Con que me quedo???? Pongo el HEADER y el META a iso-8859-1??? o a UTF-8?
Luego se supone que tengo que hacer un script que transforme cada entrada de la base de datos a iso-8859-1 o UTF-8 y lo "UPDATEE" en la base de datos?
La base de datos, con LATIN1 o con UTF?
« Última modificación: 12 Marzo 2010, 16:49 por Skeletron » En línea

Páginas: [1] 2 3 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Acentos en mysql (con php)
Bases de Datos
Shon 7 3,080 Último mensaje 8 Enero 2011, 21:05
por ~ Yoya ~
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines