Campos con tildes en Mysql, Php

Intentando guardar textos en la base de datos, me encontré con el problema que las letras con tildes no se guardan como tales, sino que según la codificación pueden aparecer de distintas maneras, al momento de mostrarlo, se siguen viendo igual, con lo que distorsiona la palabra.

La codificación que debería usarse es Utf8. El problema es que son distintos y variados los lugares donde hay que cambiar la codificación, y si todo el programa usa una codificación, y el servidor donde termina colgada la página otra, nos encontramos con un enorme problema. Una solución simple es usar

htmlentities

Suponiendo que tenemos una cadena de texto en la variable $texto

Se utiliza

$texto = htmlentities($texto);

Lo que hace es cambiar los tildes a su equivalente en html, por ejemplo una á lo cambia a á

Al momento de mostrar el texto, el navegador lo entiende como una letra con tilde y la muestra.

Anuncios

5 Respuestas a “Campos con tildes en Mysql, Php

  1. Iván Ayala enero 31, 2011 en 6:43 pm

    Perfecto es la mejor y la más simple solución que he encontrado, muchas gracias!!!

  2. Miguel marzo 30, 2012 en 3:44 pm

    A mi no me funciona. He probado con todo y no hay manera de que aparezcan las tildes.

  3. Luis junio 1, 2012 en 12:55 pm

    No es para nada correcto usar htmlentities, htmlspecialchars, etc. Esas funcionen deberán usarse para mostrar los datos una vez recibidos mediante $_GET o $_POST, ya que si lo hacen como comenta el autor la nota, habrá problemas, por ejemplo si existe algún campo de búsqueda en el sitio. Lo ideal es guardar las Ñ y Acentos(tildes) como tales.

    Para ello, la solución es establecer todo como utf8, empecesando con las conexiones a la BD, por ejemplo se puede usar mysql_set_charset(‘utf8’); o mysql_query(“SET NAMES ‘utf8′”); después de crear la conexión con MySQL, ademas poner algunos otros parametros como:

    mysql_query(“SET character_set_results = ‘utf8’, character_set_client = ‘utf8’, character_set_connection = ‘utf8’, character_set_database = ‘utf8’, character_set_server = ‘utf8′”,$variable_de_conexion);

    Algunos dependen de la versión de php como el primero mysql_set_charset() que esta disponible desde php 5.3.

    Después todos los archivos php/html deben tener la misma codificación utf8, para ello lo puede establecer en el header de la página como: o bien en el los php, al inicio de la forma:
    header(“Content-Type: text/html;charset=utf-8”);

    Hagan esto que les comento y verán que después podrán guardar las ñ y tildes como tales sin depender de los clasicos utf8_decode() utf8_encode(), htmlentities(),htmlspecialchars(), claro refiriendome a la entrada de datos.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: