代码之家  ›  专栏  ›  技术社区  ›  Lawrence Barsanti

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

  •  3
  • Lawrence Barsanti  · 技术社区  · 17 年前
    <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\':\'ima string\', \“field1\”:84、\“field3\”:\“所以我 我\“}

    为什么要添加转义字符? 我能做些什么来防止这种情况吗?

    有人已经提到了PHP函数stripslashes。我现在正在使用它,但我想一起去掉斜杠。

    5 回复  |  直到 17 年前
        1
  •  5
  •   instanceof me    17 年前

    检查您的PHP配置是否已完成 magic_quotes_gpc 激活,在这种情况下,PHP服务器会自动添加斜杠以获取/POST/cookie值。。。

        2
  •  2
  •   jrburke    17 年前

    我相信问题只是您用来输出字符串的工具所做的转义之一。例如:

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

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

        3
  •  1
  •   Mathew    17 年前

    如果信息在离开客户端时是正确的,那么dojo必须在将信息发送到$\u POST之前执行一些向导,不是吗?是否可以为dojo.toJson()方法设置任何标志,以允许您控制输入字符串操作/转义的级别?

        4
  •  1
  •   Jason    17 年前

    检查主机上是否启用了magic quotes

        5
  •  1
  •   hegemon    17 年前

    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);
    }