0

我的网站上有一个窗口,访问者可以在其中更改密码。

问题是 & 字符从未被使用:

如果我输入这两个新密码:

stack& stack&(第二个是确认)

BD 中的插入是堆栈(没有 &)。

这是js代码:

data: 'nouveau_mdp=' + $('input#champ_nouveau_mdp').val(),

警报显示我“堆栈&”

在 PHP 中,$_POST 的 var_dump 给了我:

堆栈(没有 &)。

& 是 jquery 的保留字吗?

这是我的 js 代码:

$.ajax({
                            type: 'POST',
                            url: 'modification_mdp.php',
                            data: 'nouveau_mdp=' + $('input#champ_nouveau_mdp').val(),
                            dataType: 'text',
                            success: function(reponse) {
                                reponse = $.trim(reponse);

你有想法重新解决这个问题吗?

提前致谢。

4

4 回答 4

2

编码字段值

data: 'nouveau_mdp=' + encodeURI($('input#champ_nouveau_mdp').val()),

通过这种方式&是用 ascii 号编码的。

于 2013-03-03T09:42:31.013 回答
0

PHP 中不允许通过 Get 方法或 Post 方法传递 & 字符。由于通过 GET 方法访问 PHP 的常用语法是ines.php?user=username&password=mypassword'&' 字符分隔两个变量。

这就是为什么它不从 'Stack&' 中获取 '&' 您可以使用 Javascript 来验证是否在文本框中没有输入 &。使用JavaScript对变量进行编码... PHP端无需解码

encodeURIComponent("stack&")
于 2013-03-03T09:39:03.947 回答
0

尝试传递一个关联数组,jQuery 将为您编码:

data: { nouveau_mdp: $('input#champ_nouveau_mdp').val() }

您需要更改接收此值的 PHP 代码以匹配(它获取的是数组而不是字符串)。

于 2013-03-03T09:48:39.647 回答
0

这条线是问题所在:

data: 'nouveau_mdp=' + $('input#champ_nouveau_mdp').val(),

& 字符在 HTTP 中具有特殊的含义。如果您有多个参数,它们将由 & 分隔,例如 nouveau_mdp=mynewpassword&old_mdp=myoldpassword

您需要做的是将诸如 &、= 等字符编码为它们的十六进制等价物,即分别为 %26 和 %3D。

在 JavaScript 中,您可以使用encodeURI()函数来执行此操作。

不过,正如另一个答案中提到的,jQuery 还允许您传递 JSON 参数字典,它会为您进行编码。

于 2013-03-03T09:54:49.237 回答