как декодировать несколько параметров из url в base64

12
E2
На сайте с 22.05.2012
Offline
53
2374

Есть определенный урл, закодированый в base64


/download.html?link=aHR0cDovL3lhbmRleC5zdC9tb3JkYS1sb2dvL2kvbG9nby5wbmc=&title=aHR0cDovL2hkLXRvcnJlbnQucnUvbG9hZC8wLTAtMC0zMTQtMjA=&size=aHR0cDovL2hkLXRvcnJlbnQucnUvbG9hZC8wLTAtMC0zMTQtMjA=

Мне нужно, чтобы на этой странице отображались следующие параметы

link

title

size

Только через javascript

/download.html?link='+fileurl+'&title='+filetitle+'&size='+filesize+'

Вот так я кодировал.

'+fileurl+' = 'http://yandex.st/morda-logo/i/logo.png'

'+filetitle+' = "Убойный уикенд"

'+filesize+' = "15.3Kb"

Помогите, пожалуйста)

siv1987
На сайте с 02.04.2009
Offline
427
#1

У вас не работает поиск? http://www.google.ru/#newwindow=1&q=base64+javascript

E2
На сайте с 22.05.2012
Offline
53
#2

Как декодировать все данные я знаю.

Но вот, мне нужно разбить по параметрам, чтобы формировалась ссылка незакодированным текстом.

<a href='+ono('link')+' alt='+ono('size')+'>'+ono('title')+'</a>

Но, у меня остается всё равно закодированным.

siv1987
На сайте с 02.04.2009
Offline
427
#3
E2
На сайте с 22.05.2012
Offline
53
#4

Первая часть.

<script type="text/javascript">
var urlParams;
(window.onpopstate = function () {
var match,
pl = /\+/g, // Regex for replacing addition symbol with a space
search = /([^&=]+)=?([^&]*)/g,
decode = function (s) { return decodeURIComponent(s.replace(pl, " ")); },
query = window.location.search.substring(1);

urlParams = {};
while (match = search.exec(query))
urlParams[decode(match[1])] = decode(match[2]);
})();
</script>
<script>
urlParams = {
link: " Hello ",
title: "main",
size: "front",
sid: "de8d49b78a85a322c4155015fdce22c4",
empty: ""
}

alert(urlParams["mode"]);
alert("empty" in urlParams);
</script>

Вторая часть.


<script type="text/javascript">
function ono(name)
{
var start=location.search.indexOf("?"+name+"=");
if (start<0) start=location.search.indexOf("&"+name+"=");
if (start<0) return '';
start += name.length+2;
var end=location.search.indexOf("&",start)-1;
if (end<0) end=location.search.length;
var go='';
for(var i=start;i<=end;i++)
{
var c=location.search.charAt(i);
go=go+(c=='+'?' ':c);
}
return unescape(go);
}
{
document.write('<a href='+ono('link')+'>'+ono('title')+'</a>');
document.write('');
}
</script>

Вот вторую часть я вроде бы создал, она работает, а как связать с первой, которая декодирует код?

siv1987
На сайте с 02.04.2009
Offline
427
#5

Какой первый?


<script type="text/javascript">
var urlParams;
(window.onpopstate = function () {
var match,
pl = /\+/g, // Regex for replacing addition symbol with a space
search = /([^&=]+)=?([^&]*)/g,
decode = function (s) { return decodeURIComponent(s.replace(pl, " ")); },
query = window.location.search.substring(1);

urlParams = {};
while (match = search.exec(query))
urlParams[decode(match[1])] = decode(match[2]);
})();
</script>

<script>
alert(decode_base64(urlParams['link']));
</script>

функцию decode_base64 или другую подобную ищем в гугле

E2
На сайте с 22.05.2012
Offline
53
#6

Вот, что у меня получилось. Но оно не работает(

<html>
<head>
<script>
function base64_decode(data) {
var i = 0;
var keyChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
var resultStr = "";
var charCd1, charCd2, charCd3;
var charEnc1, charEnc2, charEnc3, charEnc4;

data = data.replace(/[^A-Za-z0-9\+\/\=]/g, "");

while (i < data.length) {
charEnc1 = keyChars.indexOf(data.charAt(i++));
charEnc2 = keyChars.indexOf(data.charAt(i++));
charEnc3 = keyChars.indexOf(data.charAt(i++));
charEnc4 = keyChars.indexOf(data.charAt(i++));

charCd1 = (charEnc1 << 2) | (charEnc2 >> 4);
charCd2 = ((charEnc2 & 15) << 4) | (charEnc3 >> 2);
charCd3 = ((charEnc3 & 3) << 6) | charEnc4;

resultStr += String.fromCharCode(charCd1);

if (charEnc3 != 64) {
resultStr += String.fromCharCode(charCd2);
}

if (charEnc4 != 64) {
resultStr += String.fromCharCode(charCd3);
}
}

return resultStr;
}
</script>
<script language="JavaScript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6/jquery.min.js" type="text/javascript"></script>
</head>
<body>



<script type="text/javascript">
var urlParams;
(window.onpopstate = function () {
var match,
pl = /\+/g, // Regex for replacing addition symbol with a space
search = /([^&=]+)=?([^&]*)/g,
decode = function (s) { return decodeURIComponent(s.replace(pl, " ")); },
query = window.location.search.substring(1);

urlParams = {};
while (match = search.exec(query))
urlParams[decode(match[1])] = decode(match[2]);
})();
</script>

<script>
alert(decode_base64(urlParams['link']));
</script>

<span class="download">
<script type="text/javascript">
function ono(name)
{
var start=location.search.indexOf("?"+name+"=");
if (start<0) start=location.search.indexOf("&"+name+"=");
if (start<0) return '';
start += name.length+2;
var end=location.search.indexOf("&",start)-1;
if (end<0) end=location.search.length;
var go='';
for(var i=start;i<=end;i++)
{
var c=location.search.charAt(i);
go=go+(c=='+'?' ':c);
}
return unescape(go);
}
{
document.write('<a href='+ono('link')+'>'+ono('title')+'</a>');
document.write('');
}
</script>
</span>
</body>
</html>
siv1987
На сайте с 02.04.2009
Offline
427
#7
Everest2:
function base64_decode(data)
Everest2:
alert(decode_base64(urlParams['link']));

Научитесь читать код.

Everest2:
function ono

Нахрена вам функция ono, если у вас уже объект с параметрами urlParams?

Everest2:
{
document.write('<a href='+ono('link')+'>'+ono('title')+'</a>');
document.write('');
}

Нафига здесь фигурные скобки, и где вы здесь декодируете из base64?


document.write('<a href='+base64_decode(urlParams['link'])+'>'+base64_decode(urlParams['title'])+'</a>');
E2
На сайте с 22.05.2012
Offline
53
#8

siv1987, спасибо огромное) работает)

Еще один вопрос, а как быть с русскими символами? Они декодируются неправильно.

siv1987
На сайте с 02.04.2009
Offline
427
#9

Русские символы отдельная песня http://javascript.ru/php/base64_decode

Не используйте тогда base64. Там нужен костыль для конвертации кодировок.

E2
На сайте с 22.05.2012
Offline
53
#10

siv1987, не посоветуете что лучше использовать?

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий