簡體   English   中英

php中javascript解碼中的base64編碼

[英]base64 encoding in javascript decoding in php

我正在嘗試在 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%YE {\\ö°(úýýÁñ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)íÇKo¡L¤<Í»äA(!xón#WÙÕGù¾g!)ùC)]Q(*}?Ìp

|S÷ä½m0×C | U>£áWÅàUù»¥ïs7Dþ1Ji%YE {\\ö°(úýýÁñ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)íÇKo¡L¤<Í»äA(!xón#WÙÕGù¾g!)ùC)]Q(*}?Ìp

請注意,第 4 個字符是不同的,然后在某處還有一兩個字符。 該字符串對應於數字簽名,因此這些字符使簽名無效。

我不知道這里發生了什么。 任何的想法? 我在標題和元數據中使用 Chrome 瀏覽器和 utf-8 編碼(Firefox 似乎在輸入框中使用不同的編碼,但我稍后會查看該問題)

編輯:

對 base64 的編碼顯然不是問題。 瀏覽器中的 base64 編碼字符串與服務器中的相同。 如果我在 javascript 中對它進行 base64 解碼,我會得到原始字符串,但是如果我在 PHP 中對其進行解碼,我會得到一個稍微不同的字符串。

EDIT2:我仍然不知道問題是什么,但我已經避免使用ajax將數據發送到blob中。

嘗試使用此命令用 js 對您的字符串進行編碼:

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

現在使用php ,您只需使用: base64_decode($signature)

如果這不起作用(我還沒有測試過),那么btoa func 可能有問題。 因此,請在此處查看此鏈接:

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="

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM