расшивровка gclid
нужна функция на javascript для расшивровки gclid параметра
есть много функций но они все для сервера, есть ли для браузера? gclid это параметр от гугла который добавляется к ссылкам там зашифрована дата и еще кое что вот например сайт по расшивровке http://gclid.tk/, я таких много видел но они все обращаются к серверу а нужна функция для браузера пример gclid: CMiPqOCPu8kCFYHbcgodoPABOQ |
насчет функции пытаюлся сделать но вот столкнулся с проблемой
почему этот код так работает, я рассчитываю на true: var temp = atob("CMiPqOCPu8kCFYHbcgodoPABOQ"); temp = btoa(temp); alert(temp == "CMiPqOCPu8kCFYHbcgodoPABOQ"); |
https://developer.mozilla.org/en-US/...dowBase64/btoa
Цитата:
function utf8_to_b64(str) { return window.btoa(escape(encodeURIComponent(str))); } function b64_to_utf8(str) { return decodeURIComponent(unescape(window.atob(str))); } var temp = utf8_to_b64("CMiPqOCPu8kCFYHbcgodoPABOQ"); temp = b64_to_utf8(temp); alert(temp == "CMiPqOCPu8kCFYHbcgodoPABOQ");//true насчёт gclid, сам не вникал, но эта статейка вроде бы должна помочь реализовать подобное на js https://deedpolloffice.com/blog/arti...clid-parameter |
я по этой статье и делал, php функция работает верно
я начал ее построчно постепенно переводить на javascript, но почти сразу проблема возникла: результаты разнятся function gclid_decode(gclid) { gclid = gclid.replace("_","/"); gclid = gclid.replace("-","+"); gclid = atob(escape(encodeURIComponent(gclid))); var matches = []; var regexp = /(?=[\x5\xd\x15\x1d%\-5=EMU\]emu}\x85\x8d\x95\x9d\xa5\xad\xb5\xbd\xc5\xcd\xd5\xdd\xe5\xed\xf5\xfd])([\x80-\xff]*[\0-\x7f])(.{4})|([\x80-\xff]*[\0-\x7f])([\x80-\xff]*[\0-\x7f])/gm; var result; while (result = regexp.exec(gclid)) { matches.push(result);} var ret = []; var key,val,temp; alert(matches.length); // 4 вместо 3 в php функции for (var i = 0; i < matches.length; i++) { key = val = 0; temp = matches[i][1] ? matches[i][1] : matches[i][3]; for (var i2 = 0; i2 < temp.length; i2++) key += (temp[i2].charCodeAt(0) & 0x7f) << i2 * 7; alert(key);} //результат javascript 8,21,10,30753 //результат php 8,21,29 //первые два кстати совпадают, не знаю где ошибка, atob дает неверный результат или регулярка в php не так работает return gclid;} gclid_decode("CMiPqOCPu8kCFYHbcgodoPABOQ"); |
Цитата:
str_replace(array('_','-'), array('+','/'), $gclid) значит _ заменяется +, а - на / escape() можно убрать, она устарела |
Цитата:
https://tools.ietf.org/html/rfc3548#section-4 Цитата:
Цитата:
https://ru.wikipedia.org/wiki/Base64 Цитата:
Цитата:
|
Цитата:
|
да все дело во флаге /s
я к сожалению эту функцию вообще не понимаю но переделанный вариант вот, с php совпадает function gclid_decode(gclid) { gclid = gclid.replace("_","/"); gclid = gclid.replace("-","+"); gclid = atob(gclid); var matches = []; var regexp = /(?=[\x5\xd\x15\x1d%\-5=EMU\]emu}\x85\x8d\x95\x9d\xa5\xad\xb5\xbd\xc5\xcd\xd5\xdd\xe5\xed\xf5\xfd])([\x80-\xff]*[\0-\x7f])([\s\S]{4})|([\x80-\xff]*[\0-\x7f])([\x80-\xff]*[\0-\x7f])/gi; var result; while (result = regexp.exec(gclid)) {matches.push(result);} var ret = []; var key,val,temp; for (var i = 0; i < matches.length; i++) { key = val = 0; temp = matches[i][1] ? matches[i][1] : matches[i][3]; for (var i2 = 0; i2 < temp.length; i2++) key += (temp[i2].charCodeAt(0) & 0x7f) << i2 * 7; if (matches[i][1]) { for (var i2 = 0; i2 < matches[i][2].length; i2++) { val = val + (matches[i][2][i2].charCodeAt(0) * Math.pow(2, i2 * 8));}} else { for (var i2 = 0; i2 < matches[i][4].length; i2++) { val = val + ((matches[i][4][i2].charCodeAt(0) & 0x7f) * Math.pow(2, i2 * 7));}} ret[key >> 3] = val;} return ret;} var x = gclid_decode("CMiPqOCPu8kCFYHbcgodoPABOQ"); alert(JSON.stringify(x)); |
вот бы еще узнать как yclid от яндекс расшифровать(
|
Часовой пояс GMT +3, время: 21:20. |