Wordpress вводит искаженный JSON и массивы в базу данных - PullRequest
0 голосов
/ 20 января 2019

Я пытаюсь создать параметр, который должен быть массивом, даже если в нем есть только один элемент, и сохранить его в базе данных как JSON. По какой-то действительно странной причине, когда я передаю значение в wordpress для обработки, он добавляет дополнительные кавычки, квадратные скобки и экранирует исходные кавычки. Но действительно странная вещь заключается в том, что если я вручную создаю точный массив из одного элемента и преобразую его в JSON, используя тот же метод, он попадает в базу данных, как и предполагалось.

public function settings_callback($input)
{
    $platforms = get_option('option_name') ? : json_encode([]);
    $platforms = json_decode($platforms, true);

    array_unshift($platforms, $input);
    $platforms2 = ["Test"];

    $platforms = json_encode($platforms);
    $platforms2 = json_encode($platforms2);

    // return $platforms;
    var_dump($platforms);
    var_dump($platforms2);
    if ($platforms === $platforms2) echo 'wtf';
    die();
}

Если я запустил приведенный выше код в функции обратного вызова для настройки и введу «Test» в качестве ввода, он действительно выдает «wtf». но если я верну $platforms, я получу запись в базе данных:

["[\"Test\"]"]

В то время как возвращение $platforms2 дает мне ожидаемую запись в БД:

["Test"]

Есть какие-нибудь идеи относительно того, что могло бы вызвать это?

Очень похожая вещь случается, если я просто передаю $platforms как массив для сериализации, фактический ввод получает меня a:1:{i:0;a:1:{i:0;s:4:"Test";}}, где созданный вручную идентичный массив получает меня a:1:{i:0;s:4:"Test";}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...