2016-03-21 4 views
2

Ich versuchte JSON.stringify ein Array an den Server wie so Rückkehr:json_decode "NULL" für POST-Daten in Wordpress

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); 
    } 
}); 

Aber wenn ich json_encode es in PHP versucht, es wieder NULL.

PHP

$param = json_decode($test, true); 
var_dump($param); //it retuns NULL 

Und wird JSON.stringify Array wie folgt angezeigt:

{\"uid\":{\"@cdata\":\"6\"},\"board_name\":{\"@cdata\":\"test\"},\"skin\":{\"@cdata\":\"default\"},\"use_comment\":{\"@cdata\":\"\"},\"use_editor\":{\"@cdata\":\"\"},\"created\":{\"@cdata\":\"20160307182421\"}} 

Was mache ich falsch?

Antwort

5

Es war einmal, dass es eine gute Idee wäre, die Anführungszeichen in GET- und POST-Parametern zu umgehen, um unwissende Entwickler vor SQL-Injection-Schwachstellen zu schützen. Sie nannten diese Zauberei, "Magic Quotes".

Als PHP den Fehler in ihren Wegen sah, beschlossen sie, diese Funktion zu entfernen, aber für WordPress the damage was already done.

WordPress hatte die magischen Zitate aus früheren Versionen übernommen und war abhängig von der halben Sicherheit, die es bot. Bis heute fügen sie die Anführungszeichen weiterhin hinzu, sodass Sie sie explizit entfernen müssen.

TL; DR:

In Wordpress verwenden stripslashes:

$test = stripslashes($_POST['settings']); 
json_decode($test, true); 
+0

Liebe die Art und Weise formuliert Sie diese haha! – Darren

+0

Und 1 Stunde Verwirrung und Herumspielen mit allem, was mir einfiel, und schließlich stieß ich auf diese Antwort, die meine Trauer beendete. :) Vielen Dank!! – zpert