mostrar - utf8_decode php
Caracteres especiales en PHP/MySQL (11)
Tengo en la base de datos palabras que incluyen caracteres especiales (en español principalmente, como tildes). En la base de datos todo se guarda y se muestra correctamente con PHPmyAdmin, pero cuando obtengo los datos (usando PHP) y los visualizo en un navegador, obtengo un personaje extraño, como un "?" con un cuadrado ... Necesito una solución general, así que no necesito escapar de cada personaje cada vez, y también podría insertar caracteres especiales en español desde un formulario PHP en la base de datos ...
El HTML es correcto:
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
Todas las tablas y databas están configurados en utf8_spanish
El personaje que obtengo:
¿¿¿Alguna sugerencia???
¡¡¡Gracias!!!
¡Cambió el juego de caracteres HTML a ISO-8859-1 solucionado el problema! Tonto
¿Estás seguro de que tienes datos UTF8 en tu base de datos para empezar?
Active la codificación Unicode en su HTML.
Cuando trato con personajes especiales, siempre me ocupo de lo siguiente:
- Los conjuntos de caracteres de base de datos, tabla y campo están todos configurados en utf8_general_ * o utf8_unicode_ *
- Me aseguro de que mi editor guarde los archivos PHP con el conjunto de caracteres correcto
- Configuré default_charset en php.ini a UTF-8 o
- Envío un tipo de contenido: text / html; charset = encabezado UTF-8
- El juego de caracteres en la etiqueta META es UTF-8 (esto es reemplazado por el encabezado HTTP Content-Type)
- Al conectarme a MySQL, publico las siguientes consultas:
- SET NAMES utf8
- SET CHARACTER SET utf8
- SET COLLATION_CONNECTION = "utf8_general_ci" / "utf8_general_ci"
Emita SET NAMES ''utf8''
justo después de conectar:
$mysqli = new mysqli("localhost", "user", "password", "database");
$mysqli->query("SET NAMES ''utf8''");
Encontré esto de algún lado y desde entonces lo he estado usando como un todo sin pensar demasiado.
mysql_query("SET character_set_results = ''utf8'', character_set_client = ''utf8'', character_set_connection = ''utf8'', character_set_database = ''utf8'', character_set_server = ''utf8''");
Haz que MySQL lo traduzca automáticamente
$conn = mysql_connect(''host'', ''user'', ''password'');
mysql_set_charset(''utf8'',$conn);
http://es.php.net/manual/en/function.mysql-set-charset.php
EDITAR: de su comentario, deduzco que esto está codificado en latin1
mysql_set_charset(''latin1_spanish_ci'',$conn);
Me gustaría proporcionar más detalles sobre la solución propuesta por vartec que es (dependiendo de su instalación de MySQL) la solución más correcta para su problema. En primer lugar, el problema del juego de caracteres / codificación en MySQL es un tema algo complejo que se trata extensamente en el capítulo 9.1 del manual de MySQL "Soporte del juego de caracteres" . En tu caso especialmente 9.1.4. "Conjuntos de caracteres de conexión y intercalaciones" será el más relevante.
Para abreviar: MySQL debe saber qué conjunto de caracteres / codificación de su aplicación cliente (hablando desde la base de datos persoective que es su script PHP) espera, ya que transcodificará todos los datos de cadena del conjunto de caracteres / codificación interna definidos en el servidor-, nivel de base de datos, tabla o columna en el conjunto / codificación de caracteres de conexión. Está utilizando UTF-8 en el lado del cliente, por lo que debe decirle a MySQL que usa UTF-8. Esto se hace mediante el comando MySQL SET NAMES ''utf8''
que se debe enviar como la primera consulta al abrir una conexión. Dependiendo de su instalación y en la biblioteca de cliente MySQL que utiliza en el script PHP esto se puede hacer automáticamente en cada conexión.
Si usa PDO, solo se trata de establecer un parámetro de configuración
$db = new PDO($dsn, $user, $password);
$db->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND, "SET NAMES ''utf8''");
Usar mysqli cambiando el conjunto de caracteres / codificación del cliente es aún más simple:
$mysqli = new mysqli("localhost", "user", "password", "db");
$mysqli->set_charset("utf8");
Espero que eso ayude a que todo sea más comprensible.
Mi solución es: haga todo lo anterior pero también estoy trabajando con Notepad ++ y el archivo debe guardarse así: vaya a la codificación en la pestaña manu y guarde el archivo -> encode en utf8
Santa mierda ... esto me estaba volviendo loco. estaba tratando de hacer lo mismo. Agregué un encabezado HTML de codificación utf-8 .. mysqli_set_charset () me salvó, horas más tarde, pero estoy contento de tenerlo funcionando ahora
otra función para tratar de codificar caracteres especiales y acentos es htmlentities ()
Simplemente puede hacer:
$link = mysql_connect("host", "user", "password");
mysql_select_db("database", $link); mysql_query("SET NAMES ''utf8'';", $link);