我有一个隐藏字段,其中有一个随机令牌用于CSRF保护。我正在序列化一个表单并尝试单独发送这个字段:
c
出于某种原因虽然它没有留下+标志。所以,如果令牌是:
1xy2 + 80A3
它变成了:
1xy280a3
因此,我的会话变量令牌与我的表单令牌不匹配,因为缺少+符号。如果随机令牌中没有+,那么它可以正常工作。我不明白为什么它会移除+符号。
答案 0 :(得分:2)
jQuery Encode/Decode字符串
var Param1 = '1xy2+80a3';
var encoded = encodeURIComponent(Param1);
$("#Encode").text(encoded);
var Param2 = '1xy2%2B80a3';
var decoded = decodeURIComponent(Param2);
$("#Decode").text(decoded);

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<span>Encode String<span><br>
<code id="Encode"></code ><hr>
<span>Decode String<span><br>
<code id="Decode"></code>
&#13;
答案 1 :(得分:1)
在此处查看encodeURIComponent()方法:encodeURIComponent
要真正回答你的问题,+字符是URI中的保留字符,将在传输之前被替换。
答案 2 :(得分:1)
您可以将jQuery的$.param
与$.serializeArray
一起使用来创建表单数据
data : $.param($("#profileForm").serializeArray()
.concat([{name:'form_token', value:'1xy2+80a3'}]
)),
如果data:
来自jQuery,例如来自$.ajax
,则可以直接传递serializeArray
的结果,jQuery将在内部为您运行$.param
data : $("#profileForm").serializeArray().concat([{name:'form_token', value:'1xy2+80a3'}],