Foros del Web » Programando para Internet » PHP »

'Basura',.. dentro del HTML (símbolos)

Estas en el tema de 'Basura',.. dentro del HTML (símbolos) en el foro de PHP en Foros del Web. 'Basura',.. dentro del HTML (símbolos) Estoy trabajando un sitio web, en la cual, la información que se crea es dinámica (alimentada por una base de ...
  #1 (permalink)  
Antiguo 16/02/2010, 10:59
Avatar de ghidalgoram  
Fecha de Ingreso: marzo-2008
Ubicación: Costa Rica
Mensajes: 446
Antigüedad: 16 años, 9 meses
Puntos: 7
'Basura',.. dentro del HTML (símbolos)

'Basura',.. dentro del HTML (símbolos)

Estoy trabajando un sitio web, en la cual, la información que se crea es dinámica (alimentada por una base de datos Mysql) .

En una parte de la página, hay una sección que se llama "Description". Esa descripción que se muestra algunas veces aparece bien (todo normal ó como debiera aparece),, PERO, en otras ocasiones la información aparece con "basura". Favor ver el siguiente texto:


En IE 8:
Cita:
"Thank you for�shopping the virtual world of BMW of Fairfax!��We�anticipate that we will be,..."
En Internet Explorer, aparece como cuadros (Si estas usando IE para ver este correo, lo notarás)


En Firefox
Cita:
"Thank you for�shopping the virtual world of BMW of Fairfax!��We�anticipate that we will be,..."
En Firefox, aparece como rombos con un signo de pregunta (Si estas usando Firefox para ver este correo, lo notarás)


A traves de un script PHP, "alimentamos" la base de datos desde un archivo CSV. Este CSV tiene la información del producto. Para actualizaciones a la base de datos, al usar comando de SQL "UPDATE", utilizo la función "htmlspecialchars()"



Algo así es la sintaxis que estoy usando:

Código PHP:
INSERT INTO tbl_cars (campo1,campo2)
VALUES
htmlspecialchars(trim(campo1),ENT_QUOTES),
htmlspecialchars(trim(campo2),ENT_QUOTES); 
Exactamente no se donde está el problema, sin embargo he pensado solo hay 2 posibilidades:
1. En el proceso de ingresar la información a la Base de Datos.
2. Al hacer la consulta a la base y desplegar los resultados en el sitio web.

Solo me pasa con ese campo ó sección "Description",.... pero no pasa todo el tiempo. Solo con algunos registros. Sugerencias.

Gracias
Saludos
__________________
Loading...
  #2 (permalink)  
Antiguo 16/02/2010, 11:11
rpv
 
Fecha de Ingreso: febrero-2010
Mensajes: 275
Antigüedad: 14 años, 10 meses
Puntos: 10
Respuesta: 'Basura',.. dentro del HTML (símbolos)

Eso es un problema de character set, de codificación, parece ser que en tu db se guardan y manejan como utf8 y en tu *.php se manejan con otro juego de caracteres (ISO-8859-1, probablemente) o viceversa.

Prueba cambiar tu código por esto:


Código SQL:
Ver original
  1. INSERT INTO tbl_cars (campo1,campo2)
  2. VALUES
  3. ( htmlspecialchars(TRIM(campo1),ENT_QUOTES,'utf-8'),
  4.  htmlspecialchars(TRIM(campo2),ENT_QUOTES,'utf-8') );

para ver si se trata de que php esté usando otro juego de caracteres, si sigue sin funcionar habría que ver que juego de caracteres manejas en php y cuales en MySQL, en MySQL haz un:

Código SQL:
Ver original
  1. SHOW CREATE TABLE tunombredetabla

para ver el tipo de codificación que usa MySQL, en tu firefox dale clic derecho y entra en ver información de página y checa la codificación para ver como maneja los datos tu PHP.
  #3 (permalink)  
Antiguo 16/02/2010, 11:56
Avatar de ghidalgoram  
Fecha de Ingreso: marzo-2008
Ubicación: Costa Rica
Mensajes: 446
Antigüedad: 16 años, 9 meses
Puntos: 7
De acuerdo Respuesta: 'Basura',.. dentro del HTML (símbolos)

Gracias rpv

Voy a seguir tu recomendación y te estaré comentando

saludos
__________________
Loading...
  #4 (permalink)  
Antiguo 16/02/2010, 17:24
Avatar de ghidalgoram  
Fecha de Ingreso: marzo-2008
Ubicación: Costa Rica
Mensajes: 446
Antigüedad: 16 años, 9 meses
Puntos: 7
Respuesta: 'Basura',.. dentro del HTML (símbolos)

No he podido resolver el problema, pero investigué lo siguiente.

Ya probé y me di cuenta que el problema es al guardar esos datos.


Cita:
"Thank you for�shopping the virtual world of BMW of Fairfax!��We�anticipate that we will be,..."
En el PHPMyAdmin, edité ese dato (Description). Hice dos pruebas:

1. Seleccioné ese campo y le hice COPY/PASTE hacia un blog de notas. Luego en el blog de notas, lo seleccioné, hice COPY/PASTE de nuevo en el campo de la base de datos. Le di guardar. Fuí a la página,... refresqué y todavía se veía esos símbolos.

2. Lo dejé en blanco y comencé a digitar una parte del contenido de "Despcription". Lo edité en el bLog de notas, Solo escribí el texto que ven arriba. Hice COPY/PASTE dentro del campo de la base de datos. Lo guardé,,... refresqué la página,... y sorpresa,... ya no aparecía esos símbolos.

Revisé la estructura de esa tabla y encontré que tiene cojetamiento "latin1_swedish_ci". Por ahi tengo otra base de datos con un Blog que usa plataforma de Wordpress. Observé que en Wordpress usan cotejamiento "utf8_general_ci". Realicé el cambio de "latin1_swedish_ci" a "utf8_general_ci". Guardé los cambios, pero es extraño,,, todo sigue igual.


Revisé el código html y si tiene el "meta"
Código HTML:
Ver original
  1. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

Hice como "rpv" me recomdó:

Agregué
Código HTML:
Ver original
  1. ( htmlspecialchars(trim(campo1),ENT_QUOTES,'utf-8')

Agregué el parámetro 'utf-8' pero todo sigue igual. Lo único bueno es q se que estoy mas cerca de la solución, pero si les agradezco cualquier observación.

Saludos
__________________
Loading...
  #5 (permalink)  
Antiguo 16/02/2010, 18:57
 
Fecha de Ingreso: noviembre-2004
Ubicación: NULL
Mensajes: 655
Antigüedad: 20 años
Puntos: 6
Respuesta: 'Basura',.. dentro del HTML (símbolos)

pon asi en el meta
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">

usa el campo como TEXT

Última edición por pilucho; 16/02/2010 a las 18:58 Razón: orto
  #6 (permalink)  
Antiguo 16/02/2010, 19:03
 
Fecha de Ingreso: noviembre-2004
Ubicación: NULL
Mensajes: 655
Antigüedad: 20 años
Puntos: 6
Respuesta: 'Basura',.. dentro del HTML (símbolos)

tambien puedes usar asi

Código PHP:
//
//
//

<? 
INSERT INTO tbl_cars 
(campo1,campo2VALUES ('$campo1','$campo2');  
?>
//
//
//
//
  #7 (permalink)  
Antiguo 16/02/2010, 21:13
rpv
 
Fecha de Ingreso: febrero-2010
Mensajes: 275
Antigüedad: 14 años, 10 meses
Puntos: 10
Respuesta: 'Basura',.. dentro del HTML (símbolos)

Bien, pues el problema es que tu PHP trabaja con UTF8 y tu MySQL con ISO-8859-1, la cuestión es que los dos deben trabajar con el mismo tipo de codificación; aquí tienes dos opciones, la de @Pilucho, donde haces que PHP cambie a ISO-8859-1 o bien te dejo la otra opción, cambiar a MySQL a UTF8:

para eso tienes que hacer que MySQL trabaje de forma nativa en UTF8, si tienes acceso al archivo de configuración de tu MySQL debes agregar:

Código MySQL:
Ver original
  1. default-character-set=utf8
  2. character-set-server=utf8
  3. default-collation=utf8_unicode_ci
  4. collation-server=utf8_unicode_ci

Si no tienes acceso debes ejecutar una QUERY DESDE PHP justo después de la conexión:

Código PHP:
mysql_query('SET NAMES utf8'); 
después cambias la estructura de tu tabla:

Código SQL:
Ver original
  1. CREATE TABLE tabla(
  2.   ID INT(9) NOT NULL AUTO_INCREMENT,
  3.   campo1 INT(15) NOT NULL DEFAULT 0,
  4.   campo2 VARCHAR(100) DEFAULT NULL,
  5.   PRIMARY KEY  (ID)
  6. ) TYPE=MyISAM;

AGREGAR:

Código SQL:
Ver original
  1. CREATE TABLE tabla(
  2.   ID INT(9) NOT NULL AUTO_INCREMENT,
  3.   campo1 INT(15) NOT NULL DEFAULT 0,
  4.   campo2 VARCHAR(100) DEFAULT NULL,
  5.   PRIMARY KEY  (ID)
  6. ) TYPE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci;
  #8 (permalink)  
Antiguo 17/02/2010, 11:59
Avatar de ghidalgoram  
Fecha de Ingreso: marzo-2008
Ubicación: Costa Rica
Mensajes: 446
Antigüedad: 16 años, 9 meses
Puntos: 7
De acuerdo Respuesta: 'Basura',.. dentro del HTML (símbolos)

Lista la solución

Después de buscar tanto y realizar modificaciones en la base de datos y de tomar los valiosos consejos de cada uno de ustedes, se solucionó el problema, gracias a Dios y a ustedes.


Solo tuve que cambiar un meta como lo mencinó pilucho.

Yo tenía:

Código HTML:
Ver original
  1. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

Y lo cambié por este otro:

Código HTML:
Ver original
  1. <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">

Anteriormente hasta había cambiado el Juego de Caracteres que tenía la tabla pero aún así no funcionaba.


La lección es que parece que para páginas dinámicas es muy recomendable usar el META:

Código HTML:
Ver original
  1. <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">

ó me imagino que dependiendo del juego que estemos usando.


Muchas gracias a todos
Saludos
__________________
Loading...

Etiquetas: csv, htmlspecialchars
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 13:07.