Debido a que todo el mundo al iniciarse con Ajax o el simple uso del Objeto XMLHttpRequest se enfrenta con problemas de acentos “ñ” eñes y otros caracteres raros cuando se inserta o se extrae de la base de datos me motiva a postear algunas soluciones.
Breve explicación según mi criterio.
Tengo entendido que para solucionar el problema de las “ñ” y acentos en una página estática simplemente ponemos en el head de la pagina el siguiente código y basta
<head>
<meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'>
</head>
Pero resulta que cuando consultamos a la DB con la típica función Ajax siguiente
función nuevoAjax(){
var xmlhttp=false;
try{
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
}catch(e){
try {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}catch(E){
xmlhttp = false;
}
}
if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
xmlhttp = new XMLHttpRequest();
}
return xmlhttp;
}
Todo lo que hagas a través de la función anterior y mas específicamente si usas Firefox lo convertirá a UTF-8 para devolver los resultados entonces en el ejemplo siguiente lo que devuelvas del servidor “"../src/Funciones.php” sacado de la base de datos y que no desees que aparezca con caracteres raros lo debes englobar en .rawurlencode() en el caso de que sea PHP y cuando haces innerHTML en javascript debes hacer unescape al responseText como en el ejemplo siguiente
ajax=nuevoAjax();
ajax.open("POST", "../src/Funciones.php",true);
ajax.onreadystatechange=function(){
if (ajax.readyState==4) {
contenido.innerHTML= unescape(ajax.responseText) ;
}
}
ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
ajax.send("accion=continuarCurso&id_usuario="+id_usuario+"&id_curso="+id_curso);
En cambio cuando deseas enviar algo para que se guarde en la base de datos mediante ajax debes englobarlo en escape por lo menos mi me ha funcionado de esta manera
Tango en el envío como en el request de PHP en el ejemplo siguiente uso escape enviar con ajax y rawurldecode() en php para volver a capturar lo que quiero guardar correctamente las palabras en la base de datos
ajax.send("accion=crearCurso&id_usuario=”+id_usuario+”idioma="+escape(idioma)+"&idiomas="+escape(idiomas)+"&descrip="+escape(descrip)+"&creador="+escape(creador)+"&porc="+porc+"");
y la funcion que recibe en php lo inverso a la forma de sacar rawurldecode()
$idioma = rawurldecode ($_REQUEST['idioma']);
$idiomas = rawurldecode ($_REQUEST['idiomas']);
$descrip = rawurldecode ($_REQUEST['descrip']);
$creador = rawurldecode ($_REQUEST['creador']);
$porc = $_REQUEST['porc'];
$id_usuario = $_REQUEST['id_usuario'];
$conexion = new ConexionMy();
$sql = $conexion->ejecutar("insert into cursos(id_curso, idioma, a_idioma, descripcion, estado, creador, porc_aprob, id_usuario
)values(default, '$idioma', '$idiomas', '$descrip', 'Pendiente', '$creador', $porc, $id_usuario)");
echo "Curso guardado puede agregar modulos e items a los modulos --->$idiomas";
No se si esta es la mejor forma de hacerlo o la mas correcta pero lo que si se es que funciona espero que le sirva a alguien
Gracias.
Búsqueda personalizada
sábado, 12 de julio de 2008
Suscribirse a:
Comentarios (Atom)