【发布时间】:2020-04-20 21:52:03
【问题描述】:
我有一个带有文本字段的 HTML 表单,我正在尝试将其作为 JSON 数据发布到 MySQL blob 中,以便检索回 PHP 数组(用于重新填充字段等) 但是,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);
这适用于没有特殊字符的文本,但是当添加“或”等时会导致错误。查看数据库,JSON 似乎没有转义任何特殊字符,即使它显然应该默认这样做(除非使用 JSON_UNESCAPED_SLASHES,我没有这样做)。
我还尝试了以下方法(当然是单独的):
$_POST = json_encode(array_map('utf8_encode', $_POST));
$_POST = htmlspecialchars(json_encode($_POST), ENT_QUOTES, 'UTF-8');
$_POST = serialize($_POST);
都有类似的问题。 一旦数组被“解码”,特殊字符会破坏它并导致它为空或无效。
谁能指出为什么这不起作用,或者在 MySQL 数据库中存储和检索 PHP 数组的最佳方法是什么(不为每个文本输入使用单独的 DB 字段,我在此页面上有数百个字段)。
【问题讨论】:
-
您尝试过
mysqli_real_escape_string()或等效的 PDO 吗?
标签: php mysql json serialization