2013-08-10 2 views
3

Я в настоящее время есть массив, который выглядит следующим образом:Расшифровать массив в строку

["screen", "left_side", "left_side", "right_side", "left_side", "right_side", "left_side", "right_side"] 

теперь я хочу, чтобы зашифровать это как-то, так что я могу использовать его в качестве URL, например: http://www.site.com/app.html?array=... это потому, что я хочу, чтобы пользователи могут делиться своими массивами.

Есть ли способ зашифровать массив, чтобы он мог использоваться в строке URL и расшифровать его позже?

+1

"шифровать"? Я думаю, вы имеете в виду «кодировать». – nnnnnn

+0

@nnnnnn Я предполагаю, что это зависит от того, как вы на это смотрите, я хочу безопасно обмениваться массивом, не создавая слишком длинную строку. –

+0

И ваши слова могут быть только left_side, right_side и screen? – xanatos

ответ

6

Вы можете использовать функции atob и btoa.

myArray = ["screen", "left_side", "left_side", "right_side", "left_side", "right_side", "left_side", "right_side"] 
btoa(JSON.stringify(myArray)) // "WyJzY3JlZW4iLCJsZWZ0X3NpZGUiLCJsZWZ0X3NpZGUiLCJyaWdodF9zaWRlIiwibGVmdF9zaWRlIiwicmlnaHRfc2lkZSIsImxlZnRfc2lkZSIsInJpZ2h0X3NpZGUiXQ==" 

Вы можете затем преобразовать его обратно в Orignal массив

array = JSON.parse(atob(str)) 

Если вы включите LZString (как указано в комментариях), вы можете получить более короткие строки.

var str = btoa(JSON.stringify(myArray)); // 132 characters 
var str = LZString.compressToBase64(JSON.stringify(myArray)); // 72 characters 
var str = LZString.compressToBase64(myArray.toString()); // 64 characters 

Чтобы распаковывать,

array = JSON.parse(LZString.decompressFromBase64(str)); 

fiddle

+0

Я бы добавил компрессию к этому решению. См. 'CompressToBase64' в http://pieroxy.net/blog/pages/lz-string/index.html – Paul

+0

Спасибо @Paul. Я добавил примеры этого. Вы можете получить этот массив, сжатый до половины размера, используя его. – FakeRainBrigand

+0

Я видел сжатие 5: 1, используя 'LZString.compressToUTF16' для хранения табличных данных в' localStorage' с библиотекой, над которой я работал [html5csv.js] (https://github.com/DrPaulBrewer/ html5csv) – Paul

0

Это может помочь вам ...

<script> 

var uri='http://www.site.com/app.html?["screen", "left_side", "left_side", "right_side", "left_side", "right_side", "left_side", "right_side"]'; 
var uri_encode=encodeURIComponent(uri); 
document.write(uri_encode); 
document.write("<br>"); 
document.write(decodeURIComponent(uri_encode)); 

</script> 

JsFiddle

0

Это должно работать.

 

var a = ["screen", "left_side", "left_side", "right_side", "left_side", 
"right_side", "left_side", "right_side"]; 

var stringa = a.toString; 
var encodeda = encodeURI(stringa); 

Затем используйте его как этот

var site = "http://www.site.com/app.html?array=" + a;
Смежные вопросы