Traté de JSON.stringify una matriz al servidor así:
JavaScript:
jQuery.ajax({ type: 'post', url: ajax_url, data: { 'settings' : JSON.stringify([...]), 'action' : [...] }, traditional: true, success:function(data) { alert("SUCCESS"); }, error: function(errorThrown){ console.log(errorThrown); } }); Pero cuando probé json_encode en PHP, devuelve NULL .
PHP
$param = json_decode($test, true); var_dump($param); //it retuns NULL Y la matriz JSON.stringify se muestra así:
{\"uid\":{\"@cdata\":\"6\"},\"board_name\":{\"@cdata\":\"test\"},\"skin\":{\"@cdata\":\"default\"},\"use_comment\":{\"@cdata\":\"\"},\"use_editor\":{\"@cdata\":\"\"},\"created\":{\"@cdata\":\"20160307182421\"}}¿Qué estoy haciendo mal?
Érase una vez, PHP decidió que sería una buena idea evitar las comillas en los parámetros GET y POST, para proteger a los desarrolladores involuntarios de las vulnerabilidades de inyección SQL. Llamaron a esta hechicería, "Citas Mágicas" .
Cuando PHP vio el error a su manera, decidieron eliminar esta característica, pero para WordPress el daño ya estaba hecho .
WordPress había adoptado las citas mágicas de versiones anteriores y se había vuelto dependiente de la seguridad mediocre que proporcionaba. Hasta el día de hoy, continúan agregando las comillas, por lo que debe eliminarlas explícitamente.
En WordPress, use stripslashes :
$test = stripslashes($_POST['settings']); json_decode($test, true);