separar objetos leer json_encode convert con php json shared-hosting

php - objetos - json_decode falla en el alojamiento de Godaddy



php return json (1)

Por el motivo que sea, solo en el alojamiento de GoDaddy (tal vez también en otros lugares, pero no en otros lugares que probé), cuando estaba enviando el formulario, el servidor estaba escapando de las citas, y eso era lo que estaba causando el problema. La solución al problema fue bastante simple: en lugar de hacerlo.

$data = json_decode($_POST[''logdata''], true);

yo si

$data = json_decode(stripslashes($_POST[''logdata'']), true);

y todo funcionó perfectamente.

Utilizo json_decode en mi PHP para analizar datos de POST (el POST se ejecuta a través de ajax). Mi código se ve así:

$data = json_decode($_POST[''logdata''], true); if(!$data) { $ecodes = array( JSON_ERROR_NONE => "No error has occurred", JSON_ERROR_DEPTH => "The maximum stack depth has been exceeded", JSON_ERROR_STATE_MISMATCH => "Invalid or malformed JSON", JSON_ERROR_CTRL_CHAR => "Control character error, possibly incorrectly encoded", JSON_ERROR_SYNTAX => "Syntax error", JSON_ERROR_UTF8 => "Malformed UTF-8 characters, possibly incorrectly encoded" ); $err = json_last_error(); $result = array("error" => 1, "error_msg" => "Invalid log data: " . $ecodes[json_last_error()]); echo json_encode($result); exit; } ... //use $data array

Este código funciona bien. Cuando se ejecuta en mi máquina linux local o en mi mac, los datos pasados ​​se decodifican correctamente y todo funciona bien. Sin embargo, cuando se ejecuta el mismo código en el alojamiento compartido de Godaddy, la decodificación falla con un error de sintaxis . Después de haber pasado mucho tiempo tratando de reducir el problema, descubrí que el problema se produce cuando tengo < o > caracteres en los valores de las propiedades del objeto JSON.

La parte de carga (ajax) en javascript se ve así:

$.ajax({ url: ''/emaillog.php'', type: ''POST'', dataType: ''json'', data: { logdata: JSON.stringify(this.logData[this.scenarioLogId]) }, cache: false, error: function(jqXHR, textStatus, errorThrown) { alert("Error occurred during upload: " + textStatus); }, success: function(data, textStatus, jqXHR) { var msg = data.error ? "An error occurred processing action log: " + data.error_msg : "Action log processed successfully."; alert(msg); } })

Como puede ver, el valor del parámetro POST se crea utilizando JSON.stringify y es correcto en la inspección (tanto del lado del cliente como del servidor). Si importa, aquí hay un valor de ejemplo de los parámetros POST enviados:

{ "scenarioId":"1", "scenarioName":"MOH", "startTime":1355496349, "log":[ { "role":"Leader", "task":"MOH", "response":"start", "time":1355496349 }, { "role":"Head", "task":"<span class=/"bold/">Assign Role</span>", "response":"done", "time":1355496351 } ] }

Si se elimina el último elemento de la matriz (con la tarea Asignar rol ), todo se procesa correctamente. Si sustituyo los caracteres < y > por espacios, de nuevo, todo está bien.

Dos preguntas surgen de esto:

  1. Si el error de sintaxis en una cadena JSON de este tipo es el comportamiento correcto, ¿por qué no veo el error en los otros dos entornos? Además, ¿por qué JSON.stringify produce una cadena incorrecta?

  2. Si el error de sintaxis en tal cadena JSON es un comportamiento incorrecto, entonces algo debe estar mal con la implementación o configuración de PHP de godaddy.

Tenga en cuenta que, si bien pregunté explícitamente sobre GoDaddy, solo es relevante en la medida en que es el único proveedor donde el código produce un error. ¿Alguien puede arrojar algo de luz sobre esta situación?