Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как декодировать русские GET-параметры? (https://javascript.ru/forum/misc/27164-kak-dekodirovat-russkie-get-parametry.html)

plazmagod 04.04.2012 14:52

Как декодировать русские GET-параметры?
 
Стоит задача выставить селекторы и значения полей, соответственно принятых GET-параметров. С цифровыми значениями порядок. А вот со строковыми значениями беда - при установке селектора в значение "Да", в GET-параметре оказывается "%C4%E0" и селектор не выставляется. Функция decodeURI и decodeURIComponent к window.location выдают ошибку: "malformed URI sequence".

string = new String(window.location);
  
   get_s = string.split("?")[1].split("&");
   
   var get_vars = [];
   var get_vals = [];
   
   for(i = 0; i < get_s.length; i++){
   
		get_vars[i] = get_s[i].split("=")[0];
		get_vals[i] = get_s[i].split("=")[1];
		
		if(get_vars[i].match(/^to_param_|^from_param_/)){
		
			$('input[name = '+ get_vars[i] +']').val(get_vals[i]);
		}
		
		if(get_vars[i].match(/^select_param_/)){
		
			$('select[name = ' + get_vars[i] + ']').val(get_vals[i]);
		}
	
   }

Nitro_Generate 04.04.2012 15:02

Если код в php стоит то можешь urlencode обработать, а полученный url в js передать

plazmagod 04.04.2012 15:25

Цитата:

Сообщение от Nitro_Generate (Сообщение 167019)
Если код в php стоит то можешь urlencode обработать, а полученный url в js передать

Не, очень желательно обойтись чисто javascript. JQuery в принципе тоже стоит, но там функций не нашел для обработки.

plazmagod 04.04.2012 17:22

Решено следующим кодом:

var trans=[];
 var snart=[];
 
 for(var i=0x410;i<=0x44F;i++){
 
	 trans[i]=i-0x350;
	 snart[i-0x350] = i;
 }
 
 trans[0x401]= 0xA8;
 trans[0x451]= 0xB8;
 snart[0xA8] = 0x401;
 snart[0xB8] = 0x451;
 
 window.urlencode = function(str){
	 var ret=[];
	 
	 for(var i=0;i<str.length;i++){
	 
		 var n=str.charCodeAt(i);
		 if(typeof trans[n]!='undefined')
		 n = trans[n];
		 if (n <= 0xFF)
		 ret.push(n);
	 }

	 return window.escape(String.fromCharCode.apply(null,ret));
 }
 
 window.urldecode = function(str){
 
	 var ret=[];
	 str = unescape(str);
	 for(var i=0;i<str.length;i++){
	 
		 var n=str.charCodeAt(i);
		 
		 if(typeof snart[n]!='undefined') n = snart[n];
		 
		 ret.push(n);
	 }

 return String.fromCharCode.apply(null,ret);
 }


Часовой пояс GMT +3, время: 13:01.