Sin decir que ya estoy viejo, llevo cerca de 10 años desarrollando y he tenido una y otra vez problemas manejando las ñ, y los acentos cuando escribo algun tipo de formulario. Muchas de las veces es por mi mala memoría de como se resuelve, eso si, la primera vez que me sucedió implementando un sitio con interacciones AJAX, casí me pongo a llorar, porque la formula que anteriormente me salía, ahora no. De allí que escriba este artículo con dos objetívos: compartir mi experiencia y por medio de escribirlo ayudar a mi cabeza a recordar la receta de resolución del problema de las ñ’s.

Dentro de nuestra tabla:

Dentro de la tabla establecer el charset del campo a: utf8 Collation: utf8_general_ci .
A mi esta combinación me ha funcionado, he leído por allí Collation: utf8_unicode_ci y utf8_spanish_ci.

Dentro de nuestra código de conexión a base de datos:

MySQL: $DBname = “nombredebase”;
mysql_connect(‘IP’,'usuario’,'clave’) or die(“No pude conectarme a MySQL” . mysql_error());

mysql_select_db($DBname) or die(“Base de datos $DBname no se encuentra disponible”);

mysql_query (“SET NAMES ‘utf8′”);

La última parte, establece el charset que será intercambiado con la base de datos en los queries.

Dentro de los encabezados HTML:

<meta http-equiv=”conten-type” content=”text/html; charset=UTF-8″ />

Le decimos al browser del chartset a utilizar, esto lo puedes utilizar también si utilizar acentos dentro de tu código html, de modo de asegurar que nos e muestren los caracteres raros dentro de tu página.

Dentro del Javascript / AJAX:

var valor = encodeURI(document.getElementById(nombreObjeto).value);

Lo que mandes en tu ajax, sobretodo si lo mandas por GET.

A tomar en cuenta, como método adicional de aseguramiento del charset, y como estas utilizando PHP, puedes establecerlo en los encabezados:

header (‘Content-type: text/html; charset=utf-8′);

Y además codificar las strings utlizadas:

$html = htmlspecialchars($utf8_string, ENT_COMPAT, ‘UTF-8′);

Espero todo esto te sirva de modo que las lagrimas que yo derramé sean las que a tí te ahorré.