no se si va aquí o en PHP porque tiene que ver con los 2 pero creo que aquí.
Bueno os comento, para cargar un listado en una página uso la función $.post() de Jquery para no recargar, y el php me devuelve un array con el listado y la paginación.
Código Javascript:
Ver original
function listar(){ $.post(m_url, function(res){ var resultado = $.parseJSON(res); $('#usersList').html(resultado['users']); $('#paginacion').html(resultado['paginacion']); }); }
Yo se lo devuelvo a la función de Javascript mediante json_encode(array) desde PHP,
funciona, muestra resultados pero a veces sale el error del titulo y casca:
Unespected end of input
Al final después de darle miles de vueltas resulta que si antes de hacer el json_encode, codifico los resultados con utf8_encode no casca pero claro se me ven los caracteres extraños, y con una funcion de javascript simulo un utf8_decode con js.
Código PHP:
Ver original
echo json_encode(array('ok'=>$elementosPorPagina, 'users'=>utf8_encode($us), 'paginacion'=>utf8_encode($paginacion)));
Pongo también la función decode de javascript por si a alguien le sirve, ya que funciona, la encontré por internet
Código Javascript:
Ver original
function utf8_decode(str_data){ var tmp_arr = [], i = 0, ac = 0, c1 = 0, c2 = 0, c3 = 0, c4 = 0; str_data += ''; while (i < str_data.length){ c1 = str_data.charCodeAt(i); if (c1 <= 191){ tmp_arr[ac++] = String.fromCharCode(c1); i++; }else if(c1 <= 223){ c2 = str_data.charCodeAt(i + 1); tmp_arr[ac++] = String.fromCharCode(((c1 & 31) << 6) | (c2 & 63)); i += 2; }else if(c1 <= 239){ // http://en.wikipedia.org/wiki/UTF-8#Codepage_layout c2 = str_data.charCodeAt(i + 1); c3 = str_data.charCodeAt(i + 2); tmp_arr[ac++] = String.fromCharCode(((c1 & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63)); i += 3; }else{ c2 = str_data.charCodeAt(i + 1); c3 = str_data.charCodeAt(i + 2); c4 = str_data.charCodeAt(i + 3); c1 = ((c1 & 7) << 18) | ((c2 & 63) << 12) | ((c3 & 63) << 6) | (c4 & 63); c1 -= 0x10000; tmp_arr[ac++] = String.fromCharCode(0xD800 | ((c1 >> 10) & 0x3FF)); tmp_arr[ac++] = String.fromCharCode(0xDC00 | (c1 & 0x3FF)); i += 4; } } return tmp_arr.join(''); }
Hasta aquí todo bien, me funcionaba bien, no se si es una chapuza porque no entiendo mucho de js pero la cuestión es que me funciona, pero hoy en otro proyecto me ha ocurrido lo mismo y al hacer el mismo proceso ahora los acentos los sustituye por un cuadradito pequeño por ejemplo:
Fernᮤez y se come tanto el caracter que lleva el acento como el siguiente y en algunos casos se come 3.
He probado de todo, he probado meterle una cabecera php con la codificación, he probado las metas y todo lo que he visto en otros posts parecidos buscando en el foro.
La cuestión es que me gustaría solucionarlo pero también si alguien me sabe orientar en saber si lo hago bien o si por el contrario resulta que se hace de otra manera, lo agradecería.
Muchas gracias por adelantado