Los caracteres especiales de PHP/MySQL no se muestran correctamente [duplicado]
Frecuentes
Visto 4,258 veces
1
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
3 Respuestas
5
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
0
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
0
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 php mysql text or haz tu propia pregunta.
¿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? - Hajo
Como ya respondió jeroen, tuve que incluir mysql_set_charset('utf8'); en el código :) ¡Pero gracias por responder! :) - Milaan
entonces debes marcar su respuesta para cerrar la pregunta - Hajo
Lo siento, tuve que "esperar 8 minutos más para marcar una respuesta" :) - Milaan