Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 09.05.2016, 04:01
Профессор
Отправить личное сообщение для psiklop Посмотреть профиль Найти все сообщения от psiklop
 
Регистрация: 04.03.2015
Сообщений: 163

да все дело во флаге /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));
Ответить с цитированием
  #12 (permalink)  
Старый 11.05.2016, 11:42
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,662

psiklop, не совсем верно, replace с флагом g нужен, флаг i не нужен, \x5\xd\ 0 нужен \x05\x0d\:
function decode(string) {
	var regexp, result, matches, match, key, value, index;
		regexp = /(?=[\x05\x0d\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])/g;
		string = string.replace(/_/g, '/').replace(/-/g, '+');
		string = atob(string);
	for (result = {}; matches = regexp.exec(string); result[key >> 3] = value) {
		if (key = value = 0, matches[1]) {
			for (match = matches[1], index = 0; index < match.length; index++)
				key += (match[index].charCodeAt(0) & 127) << index * 7;
			for (match = matches[2], index = 0; index < match.length; index++)
				value += (match[index].charCodeAt(0) * Math.pow(2, index * 8));
		} else {
			for (match = matches[3], index = 0; index < match.length; index++)
				key += (match[index].charCodeAt(0) & 127) << index * 7;
			for (match = matches[4], index = 0; index < match.length; index++)
				value += (match[index].charCodeAt(0) & 127) * Math.pow(2, index * 7);
		}
	}
	return result;
}
Ответить с цитированием
  #13 (permalink)  
Старый 06.10.2016, 13:57
Профессор
Отправить личное сообщение для psiklop Посмотреть профиль Найти все сообщения от psiklop
 
Регистрация: 04.03.2015
Сообщений: 163

вот бы еще узнать как yclid от яндекс расшифровать(
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск