我正在使用ember的查询参数功能来验证我的服务器上的帐户是否有激活网址。
网址看起来像这样:
http://myapp/activation/?id=ZDE2ZTE2MTItYTFmMC00Zjk1LWJhZGUtMGYwNWE1ZDA2ZmRl&code=OGQ4MTQyYzQ5MTVjMGIxNGY4ZDk4MDYxMWRiZGU4N2EzMjY3ZDRhZA==
服务器的参数是Base64编码的。
我的activation.js控制器在某处执行此操作:
Em.$.ajax({
url: "http://localhost:8080/myapp/api/activation",
type: "POST",
contentType: "application/json",
dataType: "json",
data: JSON.stringify({
id: this.get("id"),
code: this.get("code")
}),
success: function () {
// ...
},
error: function () {
// ...
}
服务器接收到正确的id,但最后代码略有不同。代码参数的尾随==
字符被截断。
我可以通过手动添加它来解决这个问题:
data: JSON.stringify({
id: this.get("id"),
code: this.get("code") + "=="
}),
这看起来不太可靠。
有趣的是,如果我解码字符串:console.log(atob(this.get("code")));
结果是正确的,则包含尾随字符。
我很困惑。有人能告诉我是否有错误或者我做错了什么。
更新:
看起来很愚蠢,但似乎是一个可靠的解决方法:
data: JSON.stringify({
id: this.get("id"),
code: btoa(atob(this.get("code")))
}),
答案 0 :(得分:2)
“=”字符用作base64编码的填充(编码字符串的长度“必须”是4的倍数)。但是,如果您使用的解码算法处理无填充字符串,则不必对字符串执行任何操作。在你的情况下,
OGQ4MTQyYzQ5MTVjMGIxNGY4ZDk4MDYxMWRiZGU4N2EzMjY3ZDRhZA==
与
相同OGQ4MTQyYzQ5MTVjMGIxNGY4ZDk4MDYxMWRiZGU4N2EzMjY3ZDRhZA
查看