Skip to content
Advertisement

Decode JSON after POST in textarea

I am having an issue decoding a JSON string with PHP and I’m pretty sure I know what is causing it, but not sure how to fix it. I am putting an array that I convert to JSON into a hidden textarea and then posting that with other information to my PHP script.

Here is a sample of the JSON string that is being placed into the text area: I am using $("#product_options").val(JSON.stringify(productOptions)); to place the JSON into the text box.

[{
   "optionID": "217",
   "optionValueID": ["3"]
}, {
   "optionID": "218",
   "optionValueID": ["5"]
}, {
   "optionID": "223",
   "optionValueID": ["8", "11"]
}, {
   "optionID": "208",
   "optionValue": ["test"]
}, {
   "optionID": "209",
   "optionValue": ["zxvsdfg"]
}, {
   "optionID": "219",
   "optionValue": ["2011-02-20"]
}, {
   "optionID": "221",
   "optionValue": ["22:25"]
}, {
   "optionID": "220",
   "optionValue": ["2011-02-20 22:25"]
}]

That decodes fine, but once I post it and read the value of the field in PHP using $_POST['json_array'] it will not decode. Below is the entire post converted to JSON:

 {
    "full_name": "sdfg",
    "phone": "sdfg",
    "email": "sdfg",
    "notes": "sdgf",
    "product_id": "42",
    "product_options": "[{"
    optionID ":"
    217 ","
    optionValueID ":["
    3 "]},{"
    optionID ":"
    218 ","
    optionValueID ":["
    5 "]},{"
    optionID ":"
    223 ","
    optionValueID ":["
    8 ","
    11 "]},{"
    optionID ":"
    208 ","
    optionValue ":["
    test "]},{"
    optionID ":"
    209 ","
    optionValue ":["
    zxvsdfg "]},{"
    optionID ":"
    219 ","
    optionValue ":["
    2011 - 02 - 20 "]},{"
    optionID ":"
    221 ","
    optionValue ":["
    22: 25 "]},{"
    optionID ":"
    220 ","
    optionValue ":["
    2011 - 02 - 20 22: 25 "]}]"
}

EDIT:

This is the PHP code I am using to decode the JSON $productOptions = json_decode($_POST['product_options']);.

The error I receive is: Invalid argument supplied for foreach() but that is because I am trying to loop through the array after its been converted from JSON.

Advertisement

Answer

Well after fighting with the code for 3 days I figured it out: json_decode or eval cannot handle ” which is how the quote was coming through in the post string, but it displayed as a ” in the browser when I did a variable dump so was very hard to debug. So to solve I added the code:

$_POST['product_options'] = str_replace('"', '"', $_POST['product_options']);

seems like a stupid PHP bug to me :{

User contributions licensed under: CC BY-SA
9 People found this is helpful
Advertisement