Foros del Web » Programando para Internet » Javascript »

[SOLUCIONADO] Tildes con ajax

Estas en el tema de Tildes con ajax en el foro de Javascript en Foros del Web. Buenas a todos, os traigo una duda que me ronda. Tengo un php con un combobox y al seleccionar un value llamo a un script ...
  #1 (permalink)  
Antiguo 28/03/2013, 08:31
 
Fecha de Ingreso: marzo-2013
Mensajes: 83
Antigüedad: 11 años, 1 mes
Puntos: 0
Tildes con ajax

Buenas a todos, os traigo una duda que me ronda.

Tengo un php con un combobox y al seleccionar un value llamo a un script que tengo en otro php, haciendo la llamada mediante ajax de la siguiente forma:

Código:
<script language="javascript">
// Interceptamos el evento submit
function buscarperfil() {
  // Enviamos el formulario usando AJAX
	$.ajax({
	type: 'POST',
	url: 'buscarPerfil.php',
	data: $('#nombres'),
	// Mostramos un mensaje con la respuesta de PHP
	success: function(data) {
		$('#BodyPerfiles').html(data);}
	})        
	return false;
}; 
</script>
el script se ejecuta bien, pero tanto el texto como el formulario que me devuelve lo hace sin tildes, mostrandome simbolos raros, esto a priori lo podría solucionar con el acute haciendo á = &aacute; pero el problema se me intensifica cuando en el script hago una consulta a la base de datos, donde a priori no se que carácteres contienen.

He probado metiendo <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/> en el head de cada php y nada.
También he probado a poner contentType: "application/x-www-form-urlencoded;charset=iso-8859-1", en la llamada de ajax y tampoco.

Muchas gracias a todos
  #2 (permalink)  
Antiguo 28/03/2013, 08:43
Avatar de dontexplain  
Fecha de Ingreso: junio-2012
Mensajes: 536
Antigüedad: 11 años, 10 meses
Puntos: 127
Respuesta: Tildes con ajax

Cita:
Iniciado por joselegolas Ver Mensaje
Buenas a todos, os traigo una duda que me ronda.

Tengo un php con un combobox y al seleccionar un value llamo a un script que tengo en otro php, haciendo la llamada mediante ajax de la siguiente forma:

Código:
<script language="javascript">
// Interceptamos el evento submit
function buscarperfil() {
  // Enviamos el formulario usando AJAX
	$.ajax({
	type: 'POST',
	url: 'buscarPerfil.php',
	data: $('#nombres'),
	// Mostramos un mensaje con la respuesta de PHP
	success: function(data) {
		$('#BodyPerfiles').html(data);}
	})        
	return false;
}; 
</script>
el script se ejecuta bien, pero tanto el texto como el formulario que me devuelve lo hace sin tildes, mostrandome simbolos raros, esto a priori lo podría solucionar con el acute haciendo á = &aacute; pero el problema se me intensifica cuando en el script hago una consulta a la base de datos, donde a priori no se que carácteres contienen.

He probado metiendo <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/> en el head de cada php y nada.
También he probado a poner contentType: "application/x-www-form-urlencoded;charset=iso-8859-1", en la llamada de ajax y tampoco.

Muchas gracias a todos
Esto dependerá de la salida mysql. La codificación de la página deberá ser equivalente a la de la salida mysql, y esta se mostrará de una forma u otra dependiendo del charset (en el header Content-Type) establecido en la cabecera de la respuesta para el cuerpo de la respuesta HTTP.

Puedes usar mysql-set-charset o un análogo de mysqli para setearlo a UTF-8 o iso-8859-1.

El establecimiento se hace antes de cada consulta, justo tras abrir conexión.
__________________
21añero.
HTML/CSS, PHP, JS/jQuery, Mysql; NodeJS/Socket.io (& V8); C++ ; Python (wxpy); Ensamblador.
Músico (clarinetista/pianista) y compositor

Última edición por dontexplain; 28/03/2013 a las 08:49
  #3 (permalink)  
Antiguo 28/03/2013, 08:50
 
Fecha de Ingreso: marzo-2013
Mensajes: 83
Antigüedad: 11 años, 1 mes
Puntos: 0
Respuesta: Tildes con ajax

Se me olvidó comentar que también he probado usando
Código PHP:
mysql_query("SET NAMES utf8"); 
justo antes de hacer una consulta y tampoco me fuciona
  #4 (permalink)  
Antiguo 28/03/2013, 08:51
Avatar de dontexplain  
Fecha de Ingreso: junio-2012
Mensajes: 536
Antigüedad: 11 años, 10 meses
Puntos: 127
Respuesta: Tildes con ajax

Cita:
La codificación de la página deberá ser equivalente a la de la salida mysql
Eso significa que el charset de la página tendrá que ser UTF8.

Cambia por tanto el charset a utf8 (utf-8)

Código HTML:
Ver original
  1. <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
__________________
21añero.
HTML/CSS, PHP, JS/jQuery, Mysql; NodeJS/Socket.io (& V8); C++ ; Python (wxpy); Ensamblador.
Músico (clarinetista/pianista) y compositor
  #5 (permalink)  
Antiguo 28/03/2013, 09:10
 
Fecha de Ingreso: marzo-2013
Mensajes: 83
Antigüedad: 11 años, 1 mes
Puntos: 0
Respuesta: Tildes con ajax

Tienes razón en que no estaba siendo consecuente, así que he modificado la salida de sql poniendola en iso-8859-1, al ver que no funcionaba, he puesto todo (todo los head también) a utf8 y sigue sin funcionarme.
Yo creo que el problema está en que ajax no me reconoce los carácteres especiales ya que si le hiciera caso a los head, no necesitaría poner &aacute; en el script al que me llama ajax.
¿Que puede estar pasando?
PD: no he dicho que en Chrome me funciona bien, se trata del maldito IE10, tengo que optimizarlo en IE.
  #6 (permalink)  
Antiguo 28/03/2013, 09:39
Avatar de dontexplain  
Fecha de Ingreso: junio-2012
Mensajes: 536
Antigüedad: 11 años, 10 meses
Puntos: 127
Respuesta: Tildes con ajax

Quizás en la configuración del IE esté el problema. Si la configuración del navegador se indica otra codificación es posible que sobreescriba la de la página.

Mira en Ver -> Codificación y verifica que está en UTF8.
__________________
21añero.
HTML/CSS, PHP, JS/jQuery, Mysql; NodeJS/Socket.io (& V8); C++ ; Python (wxpy); Ensamblador.
Músico (clarinetista/pianista) y compositor
  #7 (permalink)  
Antiguo 28/03/2013, 10:17
 
Fecha de Ingreso: marzo-2013
Mensajes: 83
Antigüedad: 11 años, 1 mes
Puntos: 0
Respuesta: Tildes con ajax

La codificación de IE10 es Europeo occidental (ISO) acorde a como lo he dejado todo (iso-8859-1). Además en el combobox me aparecen las tildes correctamente, pero al mostrar los datos del script que llamo con ajax es donde empiezan los problemas.
Gracias de todas formas dontexplain por los mensajes, si encuentro la solución igualmente te la haré saber.
  #8 (permalink)  
Antiguo 28/03/2013, 10:21
Avatar de dontexplain  
Fecha de Ingreso: junio-2012
Mensajes: 536
Antigüedad: 11 años, 10 meses
Puntos: 127
Respuesta: Tildes con ajax

Cita:
Iniciado por joselegolas Ver Mensaje
La codificación de IE10 es Europeo occidental (ISO) acorde a como lo he dejado todo (iso-8859-1). Además en el combobox me aparecen las tildes correctamente, pero al mostrar los datos del script que llamo con ajax es donde empiezan los problemas.
Gracias de todas formas dontexplain por los mensajes, si encuentro la solución igualmente te la haré saber.
Realmente me interesa que no te los muestre. Me da curiosidad, por lo raro más que nada.

Comprueba que guardaste el fichero del lado del servidor (al que llamas mediante ajax) con UTF8 y no UTF8 con BOM. Vuélvelo a guardar, pero esta vez comprueba que es UTF-8 exclusivamente.

La otra alternativa es que conviertas todos los caracteres desde el servidor a html mediante htmlentities
__________________
21añero.
HTML/CSS, PHP, JS/jQuery, Mysql; NodeJS/Socket.io (& V8); C++ ; Python (wxpy); Ensamblador.
Músico (clarinetista/pianista) y compositor
  #9 (permalink)  
Antiguo 28/03/2013, 10:29
 
Fecha de Ingreso: marzo-2013
Mensajes: 83
Antigüedad: 11 años, 1 mes
Puntos: 0
Respuesta: Tildes con ajax

He conseguido dar con la solución, en el script he puesto la siguiente línea de código:
Código PHP:
Ver original
  1. header("Content-Type: text/html; charset=iso-8859-1");
y eso que ya tenía en las etiquetas head de todos los php la instrucción:
Código PHP:
Ver original
  1. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
No entiendo cual es la diferencia, si me la explicas dormiré mejor, llevaba dos días con la duda y no lo conseguía, gracias dontexplain.
  #10 (permalink)  
Antiguo 28/03/2013, 10:37
Avatar de dontexplain  
Fecha de Ingreso: junio-2012
Mensajes: 536
Antigüedad: 11 años, 10 meses
Puntos: 127
Respuesta: Tildes con ajax

Cita:
Iniciado por joselegolas Ver Mensaje
He conseguido dar con la solución, en el script he puesto la siguiente línea de código:
Código PHP:
Ver original
  1. header("Content-Type: text/html; charset=iso-8859-1");
y eso que ya tenía en las etiquetas head de todos los php la instrucción:
Código PHP:
Ver original
  1. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
No entiendo cual es la diferencia, si me la explicas dormiré mejor, llevaba dos días con la duda y no lo conseguía, gracias dontexplain.


La diferencia es la siguiente. Una respuesta HTTP se compone de dos partes, una cabecera y un cuerpo. En la cabecera van los headers que especifican cuestiones acerca de la respuesta y en el body el contenido.

header("cabecera:valor") añade un header real en la cabecera de la respuesta.

<meta http equiv> está en el cuerpo de la respuesta, después de las cabeceras, por lo tanto, no es una cabecera.

La prioridad es siempre headers -> meta. Por lo que siempre prevalecerá lo que haya en headers.

Probablemente el servidor haya estado mandando un header predefinido con una codificación distinta a la que tú indicaste en meta.

Un saludo.
__________________
21añero.
HTML/CSS, PHP, JS/jQuery, Mysql; NodeJS/Socket.io (& V8); C++ ; Python (wxpy); Ensamblador.
Músico (clarinetista/pianista) y compositor

Etiquetas: ajax, formulario, html, php, tildes
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:38.