2017-01-23 3 views
0

У меня есть длинная строка json, которую я отправляю на сервер PHP с использованием запроса на отправку AJAX. Моя проблема в том, что я действительно не могу избежать строк или значений упомянутого json. Вот данные jsonКак избежать этого многомерного json-массива/строки

Функция PHP на вкладке HTML и json на вкладке JS.

Json выше уже прошел функцию json_decode в php и var_dump. Примечание данные на object['rest_data']['q25']['q25_others'] данных: "25 others "" и должно быть "25 others \"". Я использовал эту функцию рекурсивной функции, которая будет выполнять эту работу.

$this->Escape($value) имеет тот же класс с рекурсивной функцией, которую я использую выше. И функция Escape предназначена только для экранирования строк, которые могут вызвать проблемы SQL во время вставки.

Любое предложение.? Я не в курсе. Благодаря!

function deep_escape($array){ 
    foreach($array as $key => $value) { 
    if(is_array($value)){ 
     $this->deep_escape($value); 
    } else { 
     $array[$key] = $this->Escape($value); 
    } 
    } 
    return $array; 
} 

Как создать JSON

all_get_data = { 
    "q16": $('#survey_question_16').val(), 
    "q17": { 
    "q17_select": $('#survey_question_17').val(), 
    "q17_others": $('#survey_question_17_others').val(), 
    }, 
    "q18": { 
    "q18_select": $('#survey_question_18').val(), 
    "q18_others": $('#survey_question_18_others').val(), 
    }, 
    "q19": $('#survey_question_19').val(), 
    "q20a": $('#survey_question_20a').val(), 
    "q20b": $('#survey_question_20b').val(), 
    "q21": $('#survey_question_21').val(), 
    "q22": $('#survey_question_22').val(), 
    "q23": { 
    "q23_select": $('#survey_question_23').val(), 
    "q23_others": $('#survey_question_23_others').val(), 
    }, 
    "q24": $('#survey_question_24').val(), 
    "q25": { 
    "q25_select": $('#survey_question_25').val(), 
    "q25_others": $('#survey_question_25_others').val(), 
    }, 
    "q26": { 
    "q26_select": $('#survey_question_26').val(), 
    "q26_others": $('#survey_question_26_others').val(), 
    }, 
    "q27": { 
    "q27_select": $('#survey_question_27').val(), 
    "q27_others": $('#survey_question_27_others').val(), 
    }, 
    "q28": { 
    "q28_select": $('#survey_question_28').val(), 
    "q28_others": $('#survey_question_28_others').val(), 
    }, 
    "q29": { 
    "q29_select": $('#survey_question_29').val(), 
    "q29_others": $('#survey_question_29_others').val(), 
    }, 
    "q30": "", 
    "q31": $('#survey_question_31').val(), 
    "q32": $('#survey_question_32').val(), 
    "q33": { 
    "q33_select": $('#survey_question_33').val(), 
    "q33_others": $('#survey_question_33_others').val(), 
    }, 
    "q34": $('#survey_question_34').val(), 
}; 

Объект свалка

array(5) {["part_i"]=> 
    array(11) {["name"]=>string(0) "" 
    ["permAdd"]=>string(0) "" 
    ["email"]=>string(0) "" 
    ["con_no"]=>string(0) "" 
    ["mo_no"]=>string(0) "" 
    ["civil"]=>NULL 
    ["gender"]=>NULL 
    ["bday"]=>string(0) "" 
    ["region"]=>NULL 
    ["province"]=>string(0) "" 
    ["locationResidence"]=>NULL 
    } 
    ["part_ii"]=>array(3) { 
    ["row1"]=>array(4) { 
     ["el_1"]=>string(0) "" 
     ["el_2"]=>string(0) "" 
     ["el_3"]=>string(0) "" 
     ["el_4"]=>string(0) "" 
    } 
    ["row2"]=>array(4) { 
     ["el_1"]=>string(0) "" 
     ["el_2"]=>string(0) "" 
     ["el_3"]=>string(0) "" 
     ["el_4"]=>string(0) "" 
    } 
    ["row3"]=>array(3) { 
     ["el_1"]=>string(0) "" 
     ["el_2"]=>string(0) "" 
     ["el_4"]=>string(0) "" 
    } 
    } 
    ["part_iii"]=>array(2) { 
    ["erow1"]=>array(3) { 
     ["eel_1"]=>string(0) "" 
     ["eel_2"]=>string(0) "" 
     ["eel_3"]=>string(0) "" 
    } 
    ["erow2"]=>array(3) { 
     ["eel_1"]=>string(0) "" 
     ["eel_2"]=>string(0) "" 
     ["eel_3"]=>string(0) "" 
    } 
    } 
    ["part_iv"]=>array(2) { 
    ["q15a"]=>array(3) { 
     ["q15a_row1"]=>array(3) { 
     ["q15a_el1"]=>string(0) "" 
     ["q15a_el2"]=>string(0) "" 
     ["q15a_el3"]=>string(0) "" 
     } 
     ["q15a_row2"]=>array(3) { 
     ["q15a_el1"]=>string(0) "" 
     ["q15a_el2"]=>string(0) "" 
     ["q15a_el3"]=>string(0) "" 
     } 
     ["q15a_row3"]=>array(3) { 
     ["q15a_el1"]=>string(0) "" 
     ["q15a_el2"]=>string(0) "" 
     ["q15a_el3"]=>string(0) "" 
     } 
    } 
    ["q15b"]=>array(2) { 
     ["q15b_select"]=>NULL 
     ["q15b_others"]=>string(0) "" 
    } 
    } 
    ["rest_data"]=>array(20) { 
    ["q16"]=>NULL 
    ["q17"]=>array(2) { 
     ["q17_select"]=>array(0) {} 
     ["q17_others"]=>string(0) "" 
    } 
    ["q18"]=>array(2) { 
     ["q18_select"]=>NULL 
     ["q18_others"]=>string(0) "" 
    } 
    ["q19"]=>string(0) "" 
    ["q20a"]=>string(2) ""'" 
    ["q20b"]=>NULL 
    ["q21"]=>NULL 
    ["q22"]=>NULL 
    ["q23"]=>array(2) { 
     ["q23_select"]=>array(0) {} 
     ["q23_others"]=>string(0) "" 
    } 
    ["q24"]=>NULL 
    ["q25"]=>array(2) { 
     ["q25_select"]=>array(5) { 
     [0]=>string(21) "Salaries_and_Benefits" 
     [1]=>string(16) "Career_challenge" 
     [2]=>string(25) "Related_to_special_skills" 
     [3]=>string(22) "Proximity_to_residence" 
     [4]=>string(5) "other" 
     } 
     ["q25_others"]=>string(11) "25 others "" 
    } 
    ["q26"]=>array(2) { 
     ["q26_select"]=>array(0) {} 
     ["q26_others"]=>string(0) "" 
    } 
    ["q27"]=>array(2) { 
     ["q27_select"]=>NULL 
     ["q27_others"]=>string(0) "" 
    } 
    ["q28"]=>array(2) { 
     ["q28_select"]=>NULL 
     ["q28_others"]=>string(0) "" 
    } 
    ["q29"]=>array(2) { 
     ["q29_select"]=>NULL 
     ["q29_others"]=>string(0) "" 
    } 
    ["q30"]=> 
    string(0) "" 
    ["q31"]=> 
    NULL 
    ["q32"]=> 
    NULL 
    ["q33"]=> 
    array(1) { 
     ["q33_select"]=> 
     array(0) { 
     } 
    } 
    ["q34"]=> 
    string(0) "" 
    } 
} 

JSON структуру

{ 
    "part_i": { 
    "name": "", 
    "permAdd": "", 
    "email": "", 
    "con_no": "", 
    "mo_no": "", 
    "civil": null, 
    "gender": null, 
    "bday": "", 
    "region": null, 
    "province": "", 
    "locationResidence": null 
    }, 
    "part_ii": { 
    "row1": { 
     "el_1": "", 
     "el_2": "", 
     "el_3": "", 
     "el_4": "" 
    }, 
    "row2": { 
     "el_1": "", 
     "el_2": "", 
     "el_3": "", 
     "el_4": "" 
    }, 
    "row3": { 
     "el_1": "", 
     "el_2": "", 
     "el_4": "" 
    } 
    }, 
    "part_iii": { 
    "erow1": { 
     "eel_1": "", 
     "eel_2": "", 
     "eel_3": "" 
    }, 
    "erow2": { 
     "eel_1": "", 
     "eel_2": "", 
     "eel_3": "" 
    } 
    }, 
    "part_iv": { 
    "q15a": { 
     "q15a_row1": { 
     "q15a_el1": "", 
     "q15a_el2": "", 
     "q15a_el3": "" 
     }, 
     "q15a_row2": { 
     "q15a_el1": "", 
     "q15a_el2": "", 
     "q15a_el3": "" 
     }, 
     "q15a_row3": { 
     "q15a_el1": "", 
     "q15a_el2": "", 
     "q15a_el3": "" 
     } 
    }, 
    "q15b": { 
     "q15b_select": null, 
     "q15b_others": "" 
    } 
    }, 
    "rest_data": { 
    "q16": null, 
    "q17": { 
     "q17_select": [], 
     "q17_others": [""] 
    }, 
    "q18": { 
     "q18_select": null, 
     "q18_others": "" 
    }, 
    "q19": "", 
    "q20a": "'", 
    "q20b": null, 
    "q21": null, 
    "q22": null, 
    "q23": { 
     "q23_select": [], 
     "q23_others": "" 
    }, 
    "q24": null, 
    "q25": { 
     "q25_select": [ 
     "Salaries_and_Benefits", 
     "Career_challenge", 
     "Related_to_special_skills", 
     "Proximity_to_residence", 
     "other" 
     ], 
     "q25_others": "25 others " 
    }, 
    "q26": { 
     "q26_select": [], 
     "q26_others": "" 
    }, 
    "q27": { 
     "q27_select": null, 
     "q27_others": "" 
    }, 
    "q28": { 
     "q28_select": null, 
     "q28_others": "" 
    }, 
    "q29": { 
     "q29_select": null, 
     "q29_others": "" 
    }, 
    "q30": "", 
    "q31": null, 
    "q32": null, 
    "q33": { 
     "q33_select": [] 
    }, 
    "q34": "" 
    } 
} 
+0

Было бы интересно посмотреть, как создать эту строку JSON и просмотреть его содержимое, прежде чем он попадает в PHP – RiggsFolly

+0

Да, StackOverflow – RiggsFolly

+0

@RiggsFolly Секундочку сэр .. –

ответ

1

Существует проблема с функцией

function deep_escape($array){ 
    foreach($array as $key => $value) { 
    if(is_array($value)){ 
     $this->deep_escape($value); // <----------- This line does nothing. 
    } else { 
     $array[$key] = $this->Escape($value); 
    } 
    } 
    return $array; 
} 

Престол, вы либо хотите, чтобы иметь возможность вызывать вашу функцию как этот

$instance->deep_escape($array); 

и имеют массив быть изменен. В этом случае вам нужно объявить его как это:

function deep_escape(&$array){     // notice the '&' 
    foreach($array as $key => &$value) {  // again '&' 
    if(is_array($value)){ 
     $this->deep_escape($value); 
    } else { 
     $value = $this->Escape($value); 
    } 
    } 
               // no "return" statement 
} 

Или вы хотите назвать это так:

$escaped_array = $instance->deep_escape($array); 

Какой путь я думаю, что вы пошли, в этом случае, вам нужно чтобы изменить это line 4 вашей функции:

function deep_escape($array){ 
    foreach($array as $key => $value) { 
    if(is_array($value)){ 
     $array[$key] = $this->deep_escape($value); 
    } else { 
     $array[$key] = $this->Escape($value); 
    } 
    } 
    return $array; 
} 
+0

Приятно, но я думаю, дело в том, что все это не нужно, если строка JSON создана правильно в первую очередь. – RiggsFolly

+0

@RiggsFolly OP никогда не создает JSON, это дамп для объекта PHP. Не путайте их. Я добавил, что я считаю структурой JSON в нижней части вопроса. –

+0

Я считаю, что строка JSON правильно создана частью JS и правильно разбирается в массиве с помощью 'json_decode()'. Дело здесь в том, чтобы избежать потенциально опасных строк перед отправкой в ​​базу данных –

0

Вы можете использовать base64_encode передавать данные через POST и дешифровать с base64_decode Он безопасен даже отправить двоичные данные, такие как изображений. (Imgur.com использовать этот метод)