Problemas con acentos y ñ en Ajax

Hola amigos, os explico un poco, tengo una web donde tengo un formulario en el cual se muestran las localidades existentes en la bbdd, según la...

La FAQ Problemas con acentos y ñ en Ajax tiene

Pertenece a la categoría:
Pregunta
Hola amigos, os explico un poco, tengo una web donde tengo un formulario en el cual se muestran las localidades existentes en la bbdd, según la localidad que elija, mediante AJAX, se muestran en otro combo las zonas que existen en la bbdd para dicha localidad. Las búsquedas en la bbdd las realizo mediante php. Pues mi problema es el siguiente si escojo una localidad la cual contiene una ‘ñ’ no me muestra las zonas para esa localidad, es como si no encontrará esa localidad. Y si es la zona la contiene la ñ no me encuentra nada en la bbdd. En las variables de php que contienen las localidades y las zonas he utilizado htmlentities y nada. Una prueba que he realizado es la siguiente: He impreso por pantalla la consulta que se realiza y la he copiado al phpmyadmin y me ha funcionado correctamente. Ahh se me olvidaba decir que en IE me funciona correctamente donde no me funciona es en Mozilla.




¿Puede ser debido a la versión de apache que tengo instalada?
Respuesta de Valeria Avellaneda
Realmente solo tienes una falla en el codigo y es muy pequeña pero afecta onmouseover='this.style.background=
Volver al árbol de categoríasVolver al árbol de categorías

Comentarios

Michel Vazquez Garcia

01/3/2007
Otra Forma de realizar lo mismo sin configurar nada, es que cuandos vayas a imprimir cualquier string, pimero codifiques la cadena a UTF-8,
<?
$cadena="áéíóúñÑ";
echo utf8_encode($cadena);
?>

Eso te solucionara el problema,

Eddwin Paz

01/3/2007
Hola lo que pasa es que tienes los ISO en el default en ingles la pagina como tiene ñ esta en castellano bueno esta pendiente con los ISO puesto que son la causa de muchos errores de ortografia puesto que el ISO por defecto esta en ingles Xiao saludos

Chus

01/3/2007
Creo que si usas utf-8 también te reconoce los acentos y las ñ. Por lo menos es lo que yo uso.
Un saludo!

pakos

09/3/2007
este es un problema algo comun cuando reciclas codigo o bien cuando se trabaja en sistemas diferentes (linux, mac, windows), ya han comentado hacerca de la codificación de caracteres ISO y UTF por lo generar como sistema de codificacion se usa iso en el sitema windos, en la actualidad muchos buscan mudarce y usar el UTF-8 por que soporta mayor numero de caracteres especial, lo malo que los caracteres especiales en utf y en iso no coinciden, y el problema radica en que usas texto generado en utf en un documento iso o bicebersa, tambien un problema muy comun es omitir un meta muy importante <META HTTP-EQUIV="Content-Type" CONTENT="text/html;charset=ISO-8859-1"> el cual idica la codificacion del archiov html, charset puede cambiar a utf-8 y de esta forma se usara el sistema utf-8 para decodificar el texto, posiblemente tu web este en iso y la base de datos este en utf-8 para lo cual en php existe dos funcones que te pueden servir utf8_decode() y utf8_encode(), la primera pasa un string utf8 a iso y el segundo de utf8 a iso, el problema se resolveria suponiendo que la base de datos este en utf8 y la salida de tu php en un iso, entoces se coregiria con
echo utf8_decode($cadenaEnIso);//retorna utf
si fuera lo cotrario seria
echo utf8_decode($cadenaEnUtf8);//retorna iso

Edu

19/6/2007
Hola, yo os voy a exponer como solucioné mi caso particular, igual no a todos os sirve.

A ver, me ha ayudado mucho el usar utf8_decode(), como comenta nuestro amigo. Pero va perfecto a la hora de hacer el INSERT, ya que el el script php recoge los datos de la llamada ajax por POST. Como digo esto perfecto, en la base de datos ya me insertaba los acentos.

Pero yo tenía otro problema, que cuando termina de hacer el insert se muestra el listado de todos los elementos de la tabla, y éstos me los mostraba con ? en, para solucionar esto utilicé la funcion htmlentities() al texto a mostrar.

Espero os sirva de ayuda

jc

29/10/2007
buenazo el utf8_encode($cadena),ahora si me muestra correctamente esta palabra COTIZACIÓN, antes salia caracter raro......

Rodrigo

16/12/2007
Tambien tuve el mismo problema, con xajax, y pasaba que tenia el html en iso y el java en utf-8, la solucion fue usar utf-8 para la web y utf_decode en el php

pedro

20/9/2008
Hola amigos, yo tenía el mismo problema que vosotros, encontré un ejemplo que explica como utilizar UTF-8, en mysql, php y html, para poder ver cualquier tipo de caracter, ya sean acentos, caracteres en chino, etc...
Os paso la url para que podáis descargar l ejemplo.
http://www.codigo-fuente.com/mostrar-todo-tipo-de-caracteres-chino-japones-arabe-con-html-php-y-mysql
<a hrer="http://www.codigo-fuente.com/mostrar-todo-tipo-de-caracteres-chino-japones-arabe-con-html-php-y-mysql/">Mostrar caracteres en UTF-8</a>

Un saludo

Pedro

Eleven

15/5/2009
Excelente
Masteeeeeeeeeersss me sacaron de un super apuro muchas gracias, me funciono solo la conversion utf8_encode($cadena)

Pao

02/6/2009
Solución
Sólo coloca esta línea antes de empezar a definir el documento HTML:

header("Content-Type: text/plain; charset=ISO-8859-1");

Akí tienes un ejemplo de cómo lo puedes usar:

<?php
header("Content-Type: text/plain; charset=ISO-8859-1");
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Ejemplo</title>
</head>

<body>
<p>
Texto de prueba.
</p>
</body>
</html>

Espero ke te sirva. A mí me funcionó sin problemas. Saludos.

J.Carlos

06/10/2009
Resuelto problema acentos y ñ
Buenos días, por fin tras varias horas dando vueltas al problema he conseguido resolverlo. Voy a explicar los pasos que seguí para ello. Primero yo estoy trabajando con jsp + javascript pero seguramente sea para todos los lenguajes igual. Primero es colocar en todas las páginas la codificación UTF-8 y después tener en cuenta que la comunicación con AJAX sea mediante post no get. De esta forma solucioné el problema. Le había dado 20 mil vueltas y nada y con este sencillo cambio funcionó.
Saludos

Emilio

13/7/2010
otra razon para usar htmlentities
Otra razon para usar htmlentities SIEMPRE que pintes textos 'no fiables' (los mete el usuario) es que evita que te cuelen html, javascript, o lo que quieran.
Si le pasas un htmlentities en el momento de pintarlo, las < se convierten en &lt;

Saete

07/12/2010
Mejor solucion
La mejor solución es incluir esta línea al principio del archivo php que está interactuando con el ajax:

header("Content-type: text/javascript; charset=iso-8859-1");

Saludos

miguelacho

25/3/2013
Gracias...
Excelente la solucion utf8_encode() estube buscando por todo lados y la aplicacion de esta funcion es la mejor, ademas de facil y excelente, muchas Gracias por su aporte

John Peter

03/10/2014
Solucionado
En el archivo PHP que recibe los datos del ajax, debe ponerse: $datorecibido = rawurldecode(utf8_decode($_POST["dato"]));

jorhaz

03/12/2014
Solucionado
Gracias a la respuesta de Michel Vazquez Garcia .
FAQ relacionadas
Volver al árbol de categoríasVolver al árbol de categorías