<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。我现在正在使用它,但我想一起摆脱斜线。
答案 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);
}
上述解决方案基于我几年前在某处找到的某人的代码。