在通过JSON编码时,甚至可以在PHP字符串中保留反斜杠吗?

时间:2013-11-21 17:01:37

标签: php regex json escaping

我已经搜索过每一篇文章。

问题是,在我的情况下,使用偶尔会在其文本中输入反斜杠。我将输入数据序列化并将其作为JSON放入数据库中。我通过PHP(JSON编码和JSON解码)来做到这一点。

但每次有人输入\反斜杠,我的json无效。我通过在编码之前用正斜杠替换反斜杠来临时修复此问题。我读到的每篇文章都是关于删除斜杠,更改它们,但我找不到的是关于在文本中保留实际的反斜杠。

我怎么会意识到这一点?任何帮助非常感谢。

编辑: 由于我得到了像xmass礼物这样的投票,我会在这里放一些代码:

page.php,包含我的HTML表单,这是一个翻录版本:

    <tr><input type="text" value="default" onchange="showValues()" id="name_0" name="name[0]" style="float:left">
    <input type="text" value="" onchange="showValues()" id="weight_0" name="weight[0]" style="float:left">
    </tr>
    <tr>
    <input type="text" value="default" onchange="showValues()" id="name_1" name="name[1]" style="float:left">
    <input type="text" value="" onchange="showValues()" id="weight_1" name="weight[1]" style="float:left">
    </tr>

然后,用户可以提交按钮,该按钮完全调用此js动作:

function save(){
 var formData = $jq("#rows :input").serializeArray();
 $jq.ajax({
    type: "POST",
    url: "saveform",
    data: formData,
    }).done(function( result ) {
        $jq("#msg").html(result);
    });
}

最后,还有saveform函数:

$jsondata = json_encode($postdata) //this is the data passed by ajax request
//and here is an sql query pushing this to the database

当$ postdata包含反斜杠时,json_encode会中断。我得到无效的json或其他东西。我对postdata进行了一些处理,并且我还使用htmlentities来编码来自用户输入的html字符(因为我还有richtext输入)。可能是因为HTML实体吗?

1 个答案:

答案 0 :(得分:0)

听起来好像你被PHP的magic quotes击中了,它们在PHP 5.4中删除了,因为这会导致奇怪且难以发现的错误。

您必须在php.ini文件中disable them,如下所示:

magic_quotes_gpc = Off