Saltar al contenido

Caracteres especiales en PHP/MySQL

Este grupo de expertos despúes de algunos días de trabajo y de juntar de información, hemos dado con la solución, queremos que te sea de utilidad para tu plan.

Solución:

Solo 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 conjunto de caracteres/codificación en MySQL es un tema un tanto complejo que se cubre ampliamente en el capítulo 9.1 del manual de MySQL, “Soporte del conjunto de caracteres”. En tu caso especialmente 9.1.4. Los “Juegos de caracteres de conexión y colaciones” serán los más relevantes.

Para abreviar: MySQL debe saber qué conjunto de caracteres / codificación está esperando su aplicación cliente (hablando desde la perspectiva de la base de datos que es su script PHP) ya que transcodificará todos los string datos del conjunto de caracteres/codificación internos definidos a nivel de servidor, base de datos, tabla o columna en el conjunto de caracteres/codificación de conexión. Está usando UTF-8 en el lado del cliente, por lo que debe decirle a MySQL que usa UTF-8. Esto se hace con el comando MySQL SET NAMES 'utf8' que debe enviarse como primera consulta al abrir una conexión. Dependiendo de su instalación y de la biblioteca de cliente MySQL que use en el script PHP, esto se puede hacer automáticamente en cada conexión.

Si usa PDO, solo es cuestión 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 para cambiar 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.

Asunto SET NAMES 'utf8' justo después de conectar:

$mysqli = new mysqli("localhost", "user", "password", "database");
$mysqli->query("SET NAMES '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 en realidad está codificado en latin1, por lo que

mysql_set_charset('latin1_spanish_ci',$conn);

Nos puedes añadir valor a nuestro contenido informacional contribuyendo tu experiencia en las notas.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *