Mysql: Caracteres, cotejamientos y mierdas

Josepanaero

Buenas, por decir algo, pq estoy harto ya del mysql xD

Estoy haciendo un libro de visitas en php y mysql y no hay ningún problema a la hora de usar el formulario e insertar las firmas en la base de datos, pero a la hora de mostrarlas me dan errores los caracteres como la eñe, las tildes, etc. Da igual el navegador que use.

La web en sí está en xhtml, con codificación en utf-8:
<?xml version="1.0" encoding="utf-8" ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

Y en el head tengo esto:
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />

Los datos de mysql son los siguientes:
Versión del servidor: 5.0.51a
Versión del protocolo: 10
Cotejamiento de las conexiones MySQL: utf8_unicode_ci

Ya he probado a cambiar este cotejamiento y el de las tablas individuales a utf8_spanish2_ci y a utf8_general_ci y sigue sin valer...

Un dato más. Inserté este texto:
a ver qué tal va esto ahora con la nueva codificación...

Y cuando lo examino en la base de datos, aparece el siguiente (he añadido espacios entre las palabras tilde, copy y sup3, pq si los dejo, mediavida.com los convierte a lo q se muestra en el siguiente apartado):
a ver qu&Atil de;&co py; tal va esto ahora con la nueva codificaci&Atil de;&su p3;n...

Y al visualizarlo en el libro de visitas, aparece lo siguiente:
a ver qué tal va esto ahora con la nueva codificación...

Me tiene esto ya de los nervios, a ver si alguien me puede echar una mano...

Muchas gracias!

Alx

charset=iso-8859-1 en el código HTML

cracking

lo q dice Alx, a mi ayer tb me paso algo parecido, a pesar de usar el charset, como tb hacia uso de javascript, y ajax, al pasar una cadena de texto del ajax al php, y en el php ejecutar la sentencia sql segun la cadena de texto que me llegaba del javascript, lo que tu dices, las "Ñ" me daban un error tontisimo q estuve como 2 horas para averiguarlo, si te pasa lo mismo q ami la Ñ te la inserta como un par de caracteres to raros... alfinal la solucion fue un tanto xapuza... empece a jugar con los ascii... mostré el ascii de la ñ q supuestamente iba a insertar en la base de datos, y resultaba q no era una ñ normal, era una paranoia, taba formado por dos codigos ascii, al darme cuenta de eso pues ya jugue un poco con str_replace pa sustituir los codigos ascii esos raros por los de la ñ, y tenia q ser con los codigos ascii, porq ponia $sentencia=str_replace("ñ","n",$sentencia); por ejemplo, pa cambiar las ñ por n, y nada, la ñ no la encontraba, ni reemplazaba ni mierdas

Josepanaero

Muchas gracias a los dos por vuestras respuestas, pero ya he encontrado la solución. Lo de cambiar la codificación a la página como decía #2 no me gustaba la idea. Y tampoco uso ajax ni javascript.

Esta mañana me ha venido la idea sola, anoche estaba ya cansadísimo de tanto programar y se nota cuando tienes la cabeza despejada y cuando no xD

Bueno, menos rollos y al lío. La cosa es q el error no estaba en la base de datos, como yo creía. El error llega antes. Resulta que tengo una función que se la paso a las cadenas de caracteres q voy a meter en la base de datos, para que me quiten código malicioso. En esa función hago varias llamadas a funciones de php q hacen este trabajo, y una en concreto me estaba dando por culo. Se trata de la función htmlentities.

Al principio yo lo tenía así:
$texto = htmlentities($texto);

Y ahí era donde me añadía los caracteres extraños. La forma de solucionarlo es añadiéndole estos parámetros:
$texto = htmlentities($texto, ENT_COMPAT, "utf-8");

El ENT_COMPAT no tiene nada q ver aquí, es simplemente el valor que toma por defecto el parámetro que hay antes del de la codificación de caracteres, q es el q nos interesa.

Para más información, consultar:
http://es.php.net/manual/en/function.htmlentities.php

Y los que tengan el mismo problema, pero no usen htmlentities, sino htmlspecialchars, se soluciona igual.

Saludos y gracias por contestar.

cracking

jumz, muchas gracias lo tendre en cuenta por si me hace falta, aunq mi caso en particular como dije era problema de pasar una cadena de ajax al php y en ese paso las ñ me hacia una cosa rara como por ejemplo las comillas ' para por ejemplo INSERT pedidos VALUES('hola','adios',etc..) pos en vez de ', me llegaban \' y la solucion fue otro tanto de lo mismo, $sentencia = str_replace("\","",$sentencia);, reemplazar las barras por nada, y gl

gracias por postear la solucion.

Usuarios habituales

  • cracking
  • Josepanaero
  • Alx