2016-05-03 2 views
1

Я пытаюсь кодировать строку в javascript и декодировать ее в php.кодировка base64 в декодировании javascript в php

Я использую этот код, чтобы поместить строку в поле ввода, а затем отправить ее через форму PUT.

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

И этот код для декодирования

$signature=base64_decode($signature); 

Здесь есть jsfiddle для страницы кодирования: https://jsfiddle.net/okaea662/

Проблема заключается в том, что я всегда получаю строку 98% правильно, но с некоторыми разные символы. Например: (первая строка строка печатается в InputBox)

|S ÷ ä½m0 × C | и> £ á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¤ < I »Аа (XON # WÙÕGù¾g) Uc)] Q (*} Ip

|S ÷ ä½m0 × C |!? и> £ á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¤ < I »Аа (! XON # WÙÕGù¾g!) Uc)] Q (*}? Ip

Обратите внимание, что 4-й символ отличается и тогда еще один-два. Строка соответствует цифровой подписи, поэтому эти символы делают подпись недопустимой.

Я понятия не имею, что здесь происходит. Есть идеи? Я использую Chrome браузер и UTF-8 кодировку в заголовке и METAS (Firefox, кажется, использует другую кодировку в InputBox, но я буду смотреть эту проблему позже)

EDIT:

Кодирование в base64, видимо, не проблема. Строка с кодировкой base64 в браузере такая же, как на сервере. Если я base64-декодировать его в javascript, я получаю исходную строку, но если я ее декодирую в PHP, я получаю немного другую строку.

EDIT2: Я все еще не знаю, в чем проблема, но я избегал его отправки данных в блобе с помощью ajax.

+2

Так вы вставив двоичные данные и ожидать, что текстовые материалы будут принять их успешно? – zerkms

+0

_ «Я пытаюсь закодировать строку в javascript» _ Кодировать в каком формате? Не знаете, что такое требование? – guest271314

+0

Проблема не в кодировке в JS, ни в расшифровке в PHP.Проблема в том, что вы пытаетесь скопировать и вставить двоичные данные из внешнего источника в HTML-форму. Подход * sane * * заключался бы в том, чтобы * внешний источник * кодировал данные в base64 [или другой 7-битной безопасной кодировке], чтобы гарантировать, что данные пробиваются через систему без проблем. – Sammitch

ответ

1

Попробуйте использовать эту команду, чтобы кодировать строку с ЯШ:

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

Я уже использую b64EncodeUnicode. Я также пытался использовать btoa и некоторые другие функции кодирования. Всегда похожие проблемы. – juanjo75es

Смежные вопросы