2016-06-07 20 views
0

So habe ich dieses Problem beim Konvertieren einer JSON-Zeichenfolge in ein PHP-Array. Die Daten werden über HTTP-POST gesendet, so dass ich weiß, dass möglicherweise eine Decodierung erforderlich ist.JSON dekodieren Zeichenfolge in PHP (Array von Arrays) Sonderzeichen

Kann jemand einen Einblick geben, wie ich json_decode() in PHP verwenden würde, um diese Zeichenfolge in ein Array zu konvertieren? "[[\"37\",\"text\",\"\\\"\\\"\"],[\"38\",\"text\",\"\\\"\\\"\"],[\"39\",\"text\",\"\\\"one word two words. Hello? \\\\\\\"escape\\\\\\\" lol\\\"\"]]"

Die Eingabe war:

[ 
    ["37", "text", ""], 
    ["38", "text", ""], 
    ["39", "text", userInputtedString] 
] 

Wo userInputtedString ist: one word two words. Hello? "escape" lol

^Oder andere Unicode-Werte

+0

Ist das _actually_, was Sie bekommen in der anfordern? Wenn dem so ist, scheint etwas in dem Bit, das das Posting erledigt, ein bisschen verrückt geworden zu sein. –

+0

Oder Sie haben ein addslashes irgendwo, oder möglicherweise magische Anführungsstriche eingeschaltet oder beide. usw. –

+0

@JonStirling Ja, es kommt nur von Javascript als AJAX-Parameter. Nur mit dem Standard 'JSON.stringify()' auf dem Array in Javascript. Es ist so seltsam ... –

Antwort

1

Verwenden utf8_encode vor json_decode

$str = "[[\"37\",\"text\",\"\\\"\\\"\"],[\"38\",\"text\",\"\\\"\\\"\"],[\"39\",\"text\",\"\\\"one word two words. Hello? \\\\\\\"escape\\\\\\\" lol\\\"\"]]"; 
$str = utf8_encode($str); 
$str = json_decode($str,JSON_UNESCAPED_SLASHES); 
+0

Das hat es irgendwie gelöst, danke. Ich musste die utf8 Kodierung in Javascript durchführen, bevor ich die Eingabe über einen POST übergab –

1

Was das Problem zu sein scheint?

Verwenden Sie einfach json_decode wie Sie erwähnt haben.

$ans = json_decode($_POST["name-of-var"]); 

Dies sollte es tun.

+0

Es gibt nur NULL zurück. Sorry, ich hätte konkreter sein sollen –

+0

[link] (http://ideone.com/Pgq8XB) es funktioniert hier, als ich es versuchte. –

+0

Ah interessant, es sieht so aus, als wäre mein POST-Eingang nicht bereinigt. Vielen Dank! –

1

Sie könnten auch verwenden uft8_encode (in HTML senden) und uft8_decode (zu erhalten), aber nicht dem richtigen Weg