Парс сериализованных данных формы, отправленных через ajax. Русские символы

TssDragon

Новичок
Всем здравствуйте.
Возник очередной вопрос, прошу помощи.
Собственно:
1) есть форма
HTML:
<form id="add-new-element" accept-charset="utf-8">
    <span class="client-details-p">Фамилия</span>
    <input type="text" name="last_name" class="client-details-input">

    <span class="client-details-p">Имя</span>
    <input type="text" name="first_name" class="client-details-input">

    <span class="client-details-p">Отчество</span>
    <input type="text" name="second_name" class="client-details-input">

    <span class="client-details-p">Дата рождения</span>
    <input type="date" name="birthdate" class="client-details-input">

    <span class="client-details-p">Область видимости</span>
    <select name="scope" class="client-details-input"></select>

    <input type="submit" id="add-new-submit" data-type="person" value="Сохранить">
</form>
2) с помощью jquery перехватываю отправку формы и сериализую данные
Код:
$(document).on('submit', '#add-new-element', function (e) {
        e.preventDefault();
        let element = $(this);
        let type = element.find('input[type=submit]').data('type');
        let dataForm = element.serialize();
        if (DEBUG == true) {
            console.log(type);
            console.log(dataForm);
        }

        addingNewElement(type, dataForm);
        return 0;
    });
3) с помощью ajax отправляю на сервер
Код:
function addingNewElement(type, dataForm) {
let controller = selectController(type);
let list = 'adding_new';
$.ajax({
type: 'post',
url: 'ajax.request.php',
data: {list: list, controller: controller, data: dataForm},
success: function (data) {
if (DEBUG == true) console.log(data);
//showContent(data.guid, type);
},
error: function (error) {
if (DEBUG == true) console.log(error);
}
});
}
4) на сервере принимаю данные и пытаюсь их декодировать и распарсить в массив для дальнейшей работы
PHP:
public static function addNewElement(RegkodData $regKodData, \PHPAuth\Auth $auth, $data = null) {
        if ($data == null) {
            echo json_encode("error: no data");
        } else {
            $dataArray = array();
            $debugArray = array();
            $guid = $auth->getUserId();

            $data = urldecode($data); // декодирую строку
            array_push($debugArray, $data);

            parse_str($data, $dataArray); // преобразую в массив
            array_push($debugArray, $dataArray);

            echo json_encode($debugArray);
        }
    }
Все бы хорошо, только русские символы не декодируются
Пример:
ввожу "Иванов Иван Иванович 01.01.1970"
передается строка "last_name=%D0%98%D0%B2%D0%B0%D0%BD%D0%BE%D0%B2&first_name=%D0%98%D0%B2%D0%B0%D0%BD&second_name=%D0%98%D0%B2%D0%B0%D0%BD%D0%BE%D0%B2%D0%B8%D1%87&birthdate=1971-01-01"

на сервере, после
PHP:
urldecode
получаю
"last_name=\u0418\u0432\u0430\u043d\u043e\u0432&first_name=\u0418\u0432\u0430\u043d&second_name=\u0418\u0432\u0430\u043d\u043e\u0432\u0438\u0447&birthdate=1971-01-01"

после
PHP:
parse_str
получаю
"last_name=\u0418\u0432\u0430\u043d\u043e\u0432&first_name=\u0418\u0432\u0430\u043d&second_name=\u0418\u0432\u0430\u043d\u043e\u0432\u0438\u0447&birthdate=1971-01-01"

Насколько я понимаю, он переводит url закодированные символы в unicode (utf-8)
Пробовал делать
PHP:
utf8_decode()
и
PHP:
unicode_decode
PHP:
iconv()
и пробовал даже
PHP:
json_encode()
=>
PHP:
json_decode(, JSON_UNESCAPED_UNICODE
)
Ничего не помогает :(
А после
PHP:
utf8_decode()
русские символы в "??????" превращаются...
С латинскими символами, соответственно, все в порядке.

Прошу помощи, где я не прав :)
 

AnrDaemon

Продвинутый новичок
Вот Как ты после urldecode() получаешь json-escaped unicode?
Ложь ведь очевидная.
Показывай весь код.
А за "echo json_encode("error: no data");" надо линейкой по рукам.
 

TssDragon

Новичок
Вот Как ты после urldecode() получаешь json-escaped unicode?
Ложь ведь очевидная.
Показывай весь код.
А за "echo json_encode("error: no data");" надо линейкой по рукам.
Собственно, я весь код и показал :)
Слегка изменил
PHP:
$debugArray
PHP:
public static function addNewElement(RegkodData $regKodData, \PHPAuth\Auth $auth, $data = null) {
mb_internal_encoding("UTF-8");
if ($data == null) {
echo json_encode("error: no data");
} else {
$dataArray = array();
$debugArray = array();
$guid = $auth->getUserId();
$debugArray['inputData'] = $data;
$data = urldecode($data); // декодирую строку
$debugArray['urlDecode'] = $data;
parse_str($data, $dataArray); // преобразую в массив
$debugArray['parseData'] = $dataArray;
echo json_encode($debugArray);
}
}
Вывод в консоль:
Код:
{"inputData":"last_name=%D0%98%D0%B2%D0%B0%D0%BD%D0%BE%D0%B2&first_name=%D0%98%D0%B2%D0%B0%D0%BD&second_name=%D0%98%D0%B2%D0%B0%D0%BD%D0%BE%D0%B2%D0%B8%D1%87&birthdate=1971-01-01",
"urlDecode":"last_name=\u0418\u0432\u0430\u043d\u043e\u0432&first_name=\u0418\u0432\u0430\u043d&second_name=\u0418\u0432\u0430\u043d\u043e\u0432\u0438\u0447&birthdate=1971-01-01",
"parseData":{"last_name":"\u0418\u0432\u0430\u043d\u043e\u0432","first_name":"\u0418\u0432\u0430\u043d","second_name":"\u0418\u0432\u0430\u043d\u043e\u0432\u0438\u0447","birthdate":"1971-01-01"}}
 

AnrDaemon

Продвинутый новичок
Так у тебя не после urldecode() это а после json_encode().
Ты вообще головой думаешь, прежде чем код писать?…
 

TssDragon

Новичок
Так у тебя не после urldecode() это а после json_encode().
Ты вообще головой думаешь, прежде чем код писать?…
Вот как бы поматериться, чтобы не словить бан?
Дурак, что сказать, согласен...
Почему-то даже в голову не пришло, что json_encode возвращаю...
Спасибо за наводку
 
Сверху