【问题标题】:Why are escape characters being added to the value of the hidden input为什么将转义字符添加到隐藏输入的值
【发布时间】:2010-11-05 13:20:06
【问题描述】:
<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\": \"所以我 我\"}

为什么要添加转义字符? 它们是由 PHP 服务器还是 Web 客户端添加的? 我能做些什么来防止这种情况发生吗?

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

【问题讨论】:

    标签: php html json


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      将双引号显示为未转义。同样,在浏览器连接到像 Charles 这样的代理时运行您的第一个示例,会显示双引号未转义。

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

        • 我不认为 dojo 在做任何时髦的事情,因为 frm.submit() 是普通的 ole javascript 和 request.value == msg 在提交表单之前。但是,stripslashes() +1。我会一直使用它,直到弄清楚发生了什么。
        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

          很可能你在你的服务器上启用了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);
          }
          

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

          【讨论】:

            猜你喜欢
            • 2018-03-08
            • 2012-12-21
            • 1970-01-01
            • 1970-01-01
            • 2018-01-21
            • 2021-10-05
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多