为什么将转义字符添加到隐藏输入的值中

时间:2009-06-24 15:09:50

标签: php html json

<body>
  <div> <?= $_POST['msg'] ?> </div>
  <form id="frm" method="post">
    <input type="hidden" name='msg' value='{"field0": "Im a string", "field1": 84, "field3": "so am I"}' />
    <input type="submit" value="test" />
  </form>
</body>

发布表单时,div标签之间会显示以下字符串。

  

{\“field0 \”:\“我是一个字符串\”,   \“field1 \”:84,\“field3 \”:\“所以我   I \“}

为什么要添加转义字符? 它们是由PHP服务器还是Web客户端添加的? 我可以做任何事来阻止这种情况吗?

有人已经提到过PHP函数stripslashes。我现在正在使用它,但我想一起摆脱斜线。

5 个答案:

答案 0 :(得分:4)

检查您的PHP配置是否已激活magic_quotes_gpc,在这种情况下,PHP服务器会自动将斜杠添加到GET / POST / cookie值...

答案 1 :(得分:2)

我认为问题只是用于输出字符串的工具所做的转义。例如:

var msg = dojo.toJson({field1: 'string', field2: 84, field3: 'another string'});
alert(msg);

将显示未引用的双引号。同样,在浏览器连接到像查尔斯这样的代理时运行你的第一个例子,显示双qoutes为未转义。

所以我相信这只是Firebug / PHP在显示字符串时所做的自动转义。

答案 2 :(得分:1)

如果信息在离开客户端时是正确的,那么在将信息发送到$ _POST之前,dojo必须做一些魔法,不是吗?是否有任何可以为dojo.toJson()方法设置的标志,它允许您控制输入字符串操作/转义的级别? 如果没有,我认为使用stripslashes()(或其他任何东西,取决于这些信息的发展方向)是唯一的答案。

答案 3 :(得分:1)

检查主机上是否启用了魔术引号

答案 4 :(得分:1)

很可能你在服务器上启用了magic_quotes_gpc。在php5.3中不推荐使用此配置选项和功能。在升级之前:

if (get_magic_quotes_gpc()) {
    set_magic_quotes_runtime(0);
    foreach (array('POST', 'GET', 'REQUEST', 'COOKIE') as $gpc)
        $GLOBALS["_$gpc"] = array_map('dequote', $GLOBALS["_$gpc"]);
}

function dequote($v) {
        return is_array($v) ? array_map('dequote', $v) : stripslashes($v);
}

上述解决方案基于我几年前在某处找到的某人的代码。