У меня есть форма HTML с текстовыми полями, которую я пытаюсь отправить в BLOB-объект MySQL в виде данных JSON, чтобы получить их обратно в массив PHP (для повторного заполнения полей et c.) Однако строка JSON, похоже, игнорирует значение по умолчанию экранирования «недопустимых» символов. Когда он пытается декодировать JSON, массив становится пустым. Мой код:
if ($_POST) {
$_POST = json_encode($_POST);
$query = "REPLACE INTO `$form` (`jsonresults`) VALUES ('$_POST') ";
$stm = $pdo->prepare("$query");
$stm->execute();
Затем массив расшифровывается с помощью:
$dbresults = json_decode($dbresults['jsonresults'], true);
Это прекрасно работает с текстом, который не имеет специальных символов, но при добавлении «или» и т. Д. c. вызывает ошибку. При просмотре базы данных JSON, по-видимому, не экранировал какие-либо специальные символы, хотя, по-видимому, он должен делать это по умолчанию (если только не используется JSON_UNESCAPED_SLASHES, а я нет).
Я также попробовал следующее (конечно, отдельно):
$_POST = json_encode(array_map('utf8_encode', $_POST));
$_POST = htmlspecialchars(json_encode($_POST), ENT_QUOTES, 'UTF-8');
$_POST = serialize($_POST);
все с похожими проблемами. Как только массив "декодируется", специальные символы разбивают его и заставляют его быть пустым или Неправильно.
Кто-нибудь может подсказать, почему это не работает, или как лучше всего хранить и извлекать массив PHP в базе данных MySQL (без использования отдельных полей БД для каждого ввода текста, У меня есть сотни на этой странице).