json_encode y caracteres latinos traidos desde MSSQL Server
Hola a todos...
tengo el siguiente problema, cuando uso json_encode con datos traídos desde MSSQL Server, me devuelve "null" en los campos del registro que tengan algún caracter latino, como: "á","é","í","ó","ú","ñ","Á","É","Í","Ó","Ú","Ñ". La solución que le di no me parece buena, es esta:
$search = array("á","é","í","ó","ú","ñ","Á","É","Í","Ó","Ú","Ñ");
$replace = array("a","e","i","o","u","n","A","E","I","O","U","N");
$datos = array();
while($row = odbc_fetch_array( $result )){
array_push($datos,array(
"ItemID" => $row["ItemID"],
"Oferta" => str_replace( $search, $replace, $row["Oferta"] ),
"Fecha" => $row["Fecha"],
"Modified" => $row["Modified"],
"Etapa" => str_replace( $search, $replace, $row["Etapa"] ),
"Autor" => str_replace( $search, $replace, $row["Autor"] )
));
}
Probé pasar caracteres de este tipo desde un arreglo creado dentro de un php, y pasan correctamente, solo me sucede cuando los cargo desde el servidor...
Yo me volvi loco, es puro php pero no se lleva bien con sqlserver... no quise profundizar porque el tiempo me mata... Esta bueno tener varias alternativas, siempre hay alguien que le sirve una u otra. Y somos pocos los que usamos sqlserver calculo.
Saludos!
si asi es, hace un tiempo usaba el SQLServer, para mis servidores de Mu Online xD, pero ni que decir los tiempos cambian. xD
WoW, jeje :p que raro a mi si me funciona, bueno en fin, lo bueno es que ya esta solucionado segun veo.
Disculpa la demora no he estado muy activo en el foro que digamos.
Puedes usar esto en tu php.
html_entity_decode($row["tuIndex"], ENT_QUOTES, "utf-8");
Disculpa la demora no he estado muy activo en el foro que digamos.
Puedes usar esto en tu php.
html_entity_decode($row["tuIndex"], ENT_QUOTES, "utf-8");
Yo probé eso y no funciona, la unica manera de hacerlo andar en con utf8_encode()...
Saludos.
Yo tengo mi base en MSSQL Server 2008, y mi server para apps en Ubuntu Server 10.10.
Tenia este mismo problema que vos desde hace un tiempo, pero lo deje para mas adelante porque preferi priorizar la aplicacion en sí, y no en los detalles.
Te cuento que hace 5 minutos termine con este problema. La solucion se basa en dos cosas:
1- En tu index.html (donde cargas la app) tenes que poner lo siguiente:
Esto va en el Head
2- En tu php, donde haces el query a mssqlserver:
utf8_encode($row["Campo1"]),
"Campo2" => utf8_encode($row["Campo2"]),
"Campo3" => utf8_encode($row["Campo3"]),
"Campo4" => utf8_encode($row["Campo4"])
));
}
echo json_encode(
array(
"success" => true,
"records" => $total,
"root" => $data
));
?>
Tene cuidado obviamnete en las mayusculas y minusculas, yo tengo campos tipo "CodEmp", "FecIng" y lo que hago es un AS "select FecIng AS ingreso, TipEmp AS tipo..."
El Json te va a devolver caracteres extraños, pero en tu grid te lo va a mostrar bien ya que incluiste que el contenido sea UTF8:
Iba a poner un screen, pero mi app contiene solo datos personales de todos los empleados de la planta...
Saludos. Comentá como te fué.
EDITO: Fijate que al final del php pongo:
"success" => true,
"records" => $total,
"root" => $data
Ahi tenes que reemplazar por los valores que utilices. A lo que iba, es que la variable $total la obtengo de otro query que cuenta los registros totales, entonces al paginar, extjs sabe cuantos registros hay en total. SQL Server NO Pagina, asi que mi solucion fue hacer un count con los mismos filtros de mi consulta principal, y en el query principal agregarle rownumber, para despues mostrar los rows que quiero. Cualquier cosa puedo armar un ejemplo claro de Como paginar con sqlserver y extjs.
Saludos.
perdona, me confundi pensando que preguntabas por MySQL, estuve googleando por tu problema y en esta pagina hay una persona que resolvió , me parece, un problema similar:
http://markmail.org/search/?q=Leticia+Larrosa#query:Leticia%20Larrosa+page:1+mid:bm73qzf2p2pjesmk+state:results
lamento no poder ayudar más
:-|
Bueno, discúlpame Tokkaido, los resultados no fueron buenos, este es el mensaje de error que obtuve:
SQL error: [Microsoft][ODBC SQL Server Driver][SQL Server]'NAMES' is not a recognized SET statement.
...al parecer la instrucción SET de MSSQL no contempla el parámetro NAMES.
Te muestro el resto de mi código, donde selecciono mi tabla:
$row["ItemID"],
"Oferta" => str_replace( $search, $replace, $row["Oferta"] ),
"Fecha" => $row["Fecha"],
"Modified" => $row["Modified"],
"Etapa" => str_replace( $search, $replace, $row["Etapa"] ),
"Autor" => str_replace( $search, $replace, $row["Autor"] )
));
$info = array('success' => true, 'data'=> $datos);
}
else { $info = array('success' => false,'msg' => 'Error: '.odbc_errormsg($result)); }
odbc_close($cnx);
}
else { $info = array('success' => false,'msg' => 'Error Conectando al Servidor '.$server); }
}
else { $info = array('success' => false,'msg' => 'Faltan parámetros en el submit'); }
echo json_encode($info);
?>
...mis saludos.
¿Conoces a alguien que pueda responder esta pregunta? Comparte el link en Twitter o Facebook
Es necesario registrarse para poder participar en el foro! Si ya tienes una cuenta puedes entrar y comentar en este foro.