【问题标题】:base64 encoding in javascript decoding in phpphp中javascript解码中的base64编码
【发布时间】:2016-05-03 00:14:47
【问题描述】:

我正在尝试在 javascript 中对字符串进行编码并在 php 中对其进行解码。

我使用此代码将字符串放入输入框,然后通过表单 PUT 发送。

document.getElementById('signature').value= b64EncodeUnicode(ab2str(signature));

这个代码要解码

$signature=base64_decode($signature);

这里有一个用于编码页面的jsfiddle: https://jsfiddle.net/okaea662/

问题是我总是得到一个 98% 正确但有一些不同字符的字符串。 例如:(第一个字符串是输入框中打印的字符串)

¦S÷ä½m0×C|u>£áWÅàUù»¥ïs7Dþ1Ji%ýÊ{\ö°(úýýÁñxçO9Ù¡ö}XÇIWçβÆü8ú²ðÑOA¤nì6S+̽ i¼?¼ºNËÒo·a©8»eO|PPþBE=HèÑqaX©$Ì磰©b2(Ðç.$nÈR,ä_OX¾xè¥3éÂòkå¾ N,sáW§ÝáV:ö~Å×à

¦S÷ ä½m0×C|u>£áWÅàUù»¥ïs7Dþ1Ji%ýÊ{\ö°(úýýÁñxçO9Ù¡ö}XÇIWçβÆü8ú²ðÑOA¤nì6S+̽ i¼?¼ºNËÒo·a©8»eO|PPþBE=HèÑ qaX©$Ì磰©b2(Ðç.$nÈR,ä_OX¾xè¥3éÂòkå¾ N ,sá W§ÝáV:ö~Å×à

请注意,第 4 个字符是不同的,然后在某处还有一两个字符。 该字符串对应一个数字签名,因此这些字符使签名无效。

我不知道这里发生了什么。任何的想法?我在 header 和 metas 中使用 Chrome 浏览器和 utf-8 编码(Firefox 似乎在输入框中使用了不同的编码,但我稍后会看看这个问题)

编辑:

base64 的编码显然不是问题。浏览器中的 base64 编码字符串与服务器中的相同。如果我在 javascript 中对其进行 base64 解码,我会得到原始字符串,但如果我在 PHP 中对其进行解码,我会得到一个稍微不同的字符串。

编辑2: 我仍然不知道问题出在哪里,但我避免了它使用 ajax 将数据发送到一个 blob 中。

【问题讨论】:

  • 所以您正在粘贴二进制数据并期望文本输入能够成功接受它们?
  • “我正在尝试用 javascript 对字符串进行编码” 编码为哪种格式?不确定是什么要求?
  • 问题既不是JS中的编码问题,也不是PHP中的解码问题。问题是您试图将二进制数据从外部源复制并粘贴到 HTML 表单中。 sane 方法* 是让 external source 以 base64 [或其他 7 位安全编码] 对数据进行编码,以确保数据顺利进行通过系统不受干扰。
  • @zerkms 我没有发送二进制数据。我正在发送 base64 编码数据。这就是编码的目的:不发送二进制数据。
  • @guest271314 如果您阅读该行下方的两行,您会看到

标签: javascript php character-encoding base64


【解决方案1】:

尝试使用此命令使用 js 对字符串进行编码:

var signature = document.getElementById('signature');
var base64 = window.btoa(signature);

现在有了php,您只需使用:base64_decode($signature)

如果这不起作用(我还没有测试过),btoa 函数可能有问题。因此,请在此处查看此链接:

https://developer.mozilla.org/en-US/docs/Web/API/WindowBase64/Base64_encoding_and_decoding

里面有一个应该可以工作的功能(如果上面没有)

function b64EncodeUnicode(str) {
    return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, function(match, p1) {
        return String.fromCharCode('0x' + p1);
    }));
}

b64EncodeUnicode(signature); // "4pyTIMOgIGxhIG1vZGU="

【讨论】:

  • 我已经使用 b64EncodeUnicode。我也尝试过使用 btoa 和其他一些编码功能。总是类似的问题。
  • Base64 在浏览器中呈现或传入 URL 是不安全的。请参阅stackoverflow.com/questions/42165891/… 了解编码/解码任意字符串的安全方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-13
  • 1970-01-01
  • 2015-07-21
  • 2017-06-29
  • 2016-05-28
  • 1970-01-01
相关资源
最近更新 更多