我有一个基于wordpress的网站,其中包含一个html表单,可以通过json将数据保存在mysql数据库中。我是这样做的:
<?php
global $wpdb;
$db = $wpdb->prefix . 'db_table';
$json_query = $wpdb->get_row(
"
SELECT app, ts
FROM $db
WHERE user_id = $user_id
",
ARRAY_A
);
$json = json_decode($json_query[app], true);
?>
<label>Family Name</label>
<input type="text" name="json[family_name]" <?php echo ($json_ok[family_name] ? 'value="' . $json_ok[family_name] . '"' : ''); ?> />
<?php
$json_send = json_encode( $_POST['json'] );
if (isset($_POST['save'])) {
$wpdb->update(
$db,
array(
'app' => $json_send
),
array( 'user_id' => $user_id )
);
?>
它可以工作,但如果用户插入撇号字符,则sistem save撇号前面会加一个反斜杠。每次用户保存时,系统都会添加反斜杠。现在我的数据库中充满了反斜杠:
{"family_name":"Rossi","indirizzo":"strada d\\\\\\\\\\\\\\\\\\\'oro","first_name":"Maurizio","country_birth":"Italy","city_birth":"Roma"}
我该如何解决这个问题? 感谢
答案 0 :(得分:1)
在wordpress中保存和使用json编码时,我自己处理了同样的问题。这就是为我解决的问题。
在输入中显示值时,只需调用stripslashes();
像这样:<input type="text" name="json[family_name]" <?php echo (stripslashes($json_ok[family_name]) ? 'value="' . stripslashes($json_ok[family_name]) . '"' : ''); ?> />
当它再次被保存时,它将停止添加那些额外的斜杠。正如John Bell在评论中提到的那样,当你调用update函数时,它调用了addslashes()。