Los caracteres especiales de PHP/MySQL no se muestran correctamente [duplicado]

Posible duplicado:
Caracteres especiales en PHP / MySQL

Tengo un problema. Tengo un fragmento de texto en mi base de datos (MySQL 5.5.20) con caracteres como 'é' y " ' " que no se muestran correctamente después de ejecutar la consulta de MySQL y mostrarla con echo($...). Con cada carácter especial que he ingresado en la base de datos, muestra un pequeño signo de interrogación dentro de un diamante. Si miro el texto en la base de datos en sí, es una 'é' y "'", así que pensé que el problema no es MySQL.

Una cosa que podría hacer es str_replace todo como " ' " --> "'" en la entrada, pero luego tengo que hacer esto para cada carácter que haya. Ah y ya tengo incluido

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

y esto no funcionó.

Espero que tengas toda la información para ayudarme, si no solo dime :) ¡Gracias de antemano!

Milaan

preguntado el 03 de mayo de 12 a las 16:05

¿Qué extensión mysql se usa? ¿Ha intentado establecer el conjunto de caracteres en utf-8 para la comunicación con la base de datos? -

Como ya respondió jeroen, tuve que incluir mysql_set_charset('utf8'); en el código :) ¡Pero gracias por responder! :) -

entonces debes marcar su respuesta para cerrar la pregunta -

Lo siento, tuve que "esperar 8 minutos más para marcar una respuesta" :) -

3 Respuestas

Necesitas tener todo en utf-8:

  • El campo de la base de datos
  • La conexión a la base de datos (mysql_set_charset('utf8'); en mysql clásico, algo como $db->exec('SET CHARACTER SET utf8'); en DOP)
  • El tipo de contenido (como ya lo has hecho)

contestado el 03 de mayo de 12 a las 16:05

que yo sepa, el archivo php en sí no importa en ese caso: Hajo

@Hajo, debo admitir que nunca lo probé con un archivo que no sea utf8... - Jeroen

bueno, el archivo php en sí solo importa si imprime algunos caracteres especiales directamente en html/php-code. - Shadowhorst

estoy usando archivos ascii en un 99% como la forma más simple en la mayoría de los vcs, se pueden forzar fácilmente y hasta ahora no hay ningún problema con la salida en iso, unicode o cualquier juego de caracteres, ya que los caracteres especiales están codificados con entidades. - Hajo

mysql_set_charset('utf8'); Esto funcionó de hecho, ¡muchas gracias! He estado buscando esto durante horas, pensé que ya lo arreglé poniéndolo en las etiquetas META. ¡Pero estaba equivocado! ¡Muchos gracias! - Milaan

Estaba usando la consulta SQL SET NAMES utf8 justo después de que la conexión a una base de datos se realice con éxito durante más de un año. Pero esto no es necesario cuando tienes todo en la misma codificación.

  • codificación de archivos fuente
  • colaciones de columnas de tabla
  • codificación de páginas web (ambos en PHP header('Content-Type: text/html; charset=utf-8'); y en <header> <meta name="Content-Type" value="text/html; charset=utf-8" />)

contestado el 03 de mayo de 12 a las 16:05

Por lo general, formateo todo el texto de entrada con str_replace y reemplazo todos los símbolos poco comunes con su &#xxx; equivalente, esto es realmente útil para evitar la inyección y la mala representación de html

es decir, si alguien ingresa etiquetas html, estarán activas en su página y así sucesivamente.

contestado el 03 de mayo de 12 a las 16:05

¿Pero no obtienes una función str_replace como de 50 líneas o algo así? - Milaan

Me gusta esto: salida = str_replace('/expresión regular/', entrada); salida = str_replace('/siguiente expresión regular/',salida); ... y así sucesivamente hasta que reemplacé en serie cada carácter, hice una función de formato (entrada) para llamar a las entradas. - Onheiron

Eso también funcionará, supongo, pero la respuesta anterior es mucho más simple y efectiva. Tampoco se necesita mucha más codificación :) Pero gracias por su respuesta :) - Milaan

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.