No, no. El error no está en cambiar htmlspecialchars() por htmlentities(), sino usar iso-8859-1, yo lo uso y me funciona sin problemas ( iso-8859-1 + htmlspecialchars() y me sale todo bien, uso chrome ).
Ahora, el problema a lo mejor está en Javascript, si usas la librería jQuery puedes usar esto para que funcione sin problemas:
//$.get para get, $.post para post
$.get('/ruta/hacia/mi/archivo.php', 'parametro=hola&id=2&ejemplo=3', function(respuesta){
document.getElementById('resultado').innerHTML = respuesta;
});
Te lo explico:
# $.get || $.post -> métodos que AJAX soporta, GET y POST
# primer parámentro $.get / $.post: ruta del archivo a llamar
# segundo parámetro: datos que se pasan al archivo, como si fuera archivo.php?algo=algo&mas=1 ......
# tercer parámetro: función que se evaluará cuando llegue la respuesta
## nota: puse function(respuesta) <-- "respuesta" es la variable en la que se guardará el resultado, puedes cambiarla por cualquiera, es cuestión de comodidad ( es decir, puedes usar cualquier nombre para la variable, no tiene por qué ser "respuesta" )
-------
Y si no usas jQuery, prueba el método que te dije ( la página que recibe los datos ha de tener sí o sí el charset ).
Me he fijado de que pones '?q=' + nombre, si el valor de la variable tiene caracteres especiales, puedes usar
encodeURIComponent() (
más info )
Saludos