 
			
				27.04.2016, 00:11
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 04.03.2015 
					
					
					
						Сообщений: 163
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
			
			 
				расшивровка gclid
			 
			
		
		
		
		нужна функция на javascript для расшивровки gclid параметра 
есть много функций но они все для сервера, есть ли для браузера? 
gclid это параметр от гугла который добавляется к ссылкам там зашифрована дата и еще кое что
 
вот например сайт по расшивровке
 http://gclid.tk/, я таких много видел но они все обращаются к серверу 
а нужна функция для браузера
 
пример gclid: CMiPqOCPu8kCFYHbcgodoPABOQ  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				27.04.2016, 16:28
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 04.03.2015 
					
					
					
						Сообщений: 163
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		насчет функции пытаюлся сделать но вот столкнулся с проблемой 
почему этот код так работает, я рассчитываю на true:
 
var temp = atob("CMiPqOCPu8kCFYHbcgodoPABOQ");
temp  = btoa(temp);
alert(temp  == "CMiPqOCPu8kCFYHbcgodoPABOQ");
 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				28.04.2016, 00:18
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 22.03.2012 
					
					
					
						Сообщений: 3,744
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		https://developer.mozilla.org/en-US/...dowBase64/btoa
	
 
	| 
		
			 Цитата: 
		
	 | 
 
	
		Unicode strings 
In most browsers, calling window.btoa() on a Unicode string will cause an InvalidCharacterError exception. 
 
One option is to escape any extended characters so that the string you actually encode is an ASCII representation of the original.
	 | 
 
	
 
 
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 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				28.04.2016, 19:21
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 04.03.2015 
					
					
					
						Сообщений: 163
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		я по этой статье и делал, 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");
 
		
	
		
		
		
		
		
		
	
		
			
			
	
			
			
			
			
			
				 
			
			
			
			
			
			
				
			
			
			
		 
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				28.04.2016, 22:04
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 22.03.2012 
					
					
					
						Сообщений: 3,744
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	
		
			Сообщение от psiklop
			 
		
	 | 
 
	
		я по этой статье и делал, 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() можно убрать, она устарела  
		
	
		
		
		
		
		
		
	
		
			
			
	
			
			
			
			
			
				 
			
			
			
			
			
			
				
			
			
			
		 
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				29.04.2016, 20:12
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 22.03.2012 
					
					
					
						Сообщений: 3,744
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от Rise
			
		
	 | 
 
	| 
		bes, в комментах там пишут что это ошибка
	 | 
 
	
 
 особо не вникал и странно, что не исправили, но вероятно это действительно так, так как gclid передаётся параметром в url, а для url обычно используют url safe алфавит с разницей в 2 последних символа
 https://tools.ietf.org/html/rfc3548#section-4
	
 
	| 
		
			 Цитата: 
		
	 | 
 
	
		62 - (minus) 
63 _ (understrike)
	 | 
 
	
 
 https://tools.ietf.org/html/rfc1421#section-4.3.2.4
о чём незатейливо узнаётся из википедии
 https://ru.wikipedia.org/wiki/Base64
	
 
	| 
		
			Сообщение от Rise
			
		
	 | 
 
	| 
		escape и encodeURIComponent убрать atob не btoa
	 | 
 
	
 
 здесь тоже верно, на входе уже base64-закодированная строка, которую просто надо раскодировать
 
	
 
	| 
		
			Сообщение от Rise
			
		
	 | 
 
	| 
		 Регулярка в php с флагом "s" копать оттуда.
	 | 
 
	
 
 в раскодированной строке gclid могут присутствуют переводы строк, зачем они там?  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				29.04.2016, 22:32
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 22.03.2012 
					
					
					
						Сообщений: 3,744
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от Rise
			
		
	 | 
 
	| 
		bes, для продолжения раскодирования...
	 | 
 
	
 
 как разделители частей в смысле?  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				09.05.2016, 04:01
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 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));
 
		
	
		
		
		
		
		
		
	
		
			
			
	
			
			
			
			
			
				 
			
			
			
			
			
			
				
			
			
			
		 
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				06.10.2016, 13:57
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 04.03.2015 
					
					
					
						Сообщений: 163
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 вот бы еще узнать как yclid от яндекс расшифровать( 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
 
 |  
  |