2009-06-24 35 views
3
<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 \”:\ “我是个字符串\”, \ “字段1 \”:84 \ “字段3 \”:\ “所以我 I \”}

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

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

回答

4

PHP配置检查是否已激活magic_quotes_gpc,在这种情况下,PHP服务器自动添加斜线GET/POST/Cookie值...

1

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

+0

我不认为Dojo是做什么时髦,因为frm.submit()是JavaScript request.value ==味精之前提交表单,以纯OLE。但是,为stripslashes()+1。我会使用它,直到我弄清楚发生了什么。 – 2009-06-24 17:28:56

2

我相信问题只是通过您使用输出字符串的工具进行转义一个。例如:

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

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

所以我相信这仅仅是一个自动逃脱萤火/ PHP确实显示您的字符串时。

1

检查,如果魔术引号是你的主机上启用

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

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