我的网站上有一个窗口,访问者可以在其中更改密码。
问题在于&人物永远不会被采取:
如果我把这两个新密码:
堆&安培; 堆栈&安培; (第二个是确认)
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);
请你知道解决这个问题吗?
提前致谢。
答案 0 :(得分:2)
对字段值进行编码
data: 'nouveau_mdp=' + encodeURI($('input#champ_nouveau_mdp').val()),
通过这种方式&
使用ascii编号进行编码。
答案 1 :(得分:0)
不能通过Get方法或PHP中的Post方法传递&符号。由于通过GET方法访问PHP的常用语法是ines.php?user=username&password=mypassword
,
'&'字符分隔两个变量。
这就是为什么不采取'&'来自'Stack&'您可以使用Javascript验证是否&未在文本框中输入。使用JavaScript对变量进行编码... PHP端不需要解码
encodeURIComponent("stack&")
答案 2 :(得分:0)
尝试传递一个关联数组,jQuery将为您编码:
data: { nouveau_mdp: $('input#champ_nouveau_mdp').val() }
您需要更改接收此值以匹配的PHP代码(它获取数组而不是字符串)。
答案 3 :(得分:0)
这一行是问题所在:
data: 'nouveau_mdp=' + $('input#champ_nouveau_mdp').val(),
& character在HTTP中有特殊含义。如果您有多个参数,它们将由&分隔。例如nouveau_mdp = mynewpassword&安培; old_mdp = myoldpassword
您需要做的是将&,=等字符编码为十六进制等值,即分别为%26和%3D。
在JavaScript中,您可以使用 encodeURI()函数执行此操作。
尽管如其他答案所述,jQuery还允许您传递参数的JSON字典,它会为您进行编码。