Polskie znaki w dll Ajax

0

Witam, zamieszcze moja biblioteke AJAX'a..

var url = "AJAX/Ajax_GetName.php?param=";  
        
        TOP_DIV= '';
        LEFT_DIV= '';
        WIDTH_DIV= '';
         
        function handleHttpResponse() 
        {
	          if (http.readyState == 4) 
	          {
	          	  panel_obj= document.getElementById("PanelAjax").style;

	              panel_obj.visibility = "visible";
	              panel_obj.top        = TOP_DIV;
	              panel_obj.marginLeft = LEFT_DIV;
	              panel_obj.width      = WIDTH_DIV;
	               
	              document.getElementById("PanelAjax").innerHTML=http.responseText;
	          }
        }
        
        function getagenttel(elemID,idx_col,p_top,p_left,p_width,param_path) 
        {
        		TOP_DIV= p_top;
        		LEFT_DIV= p_left;
        		WIDTH_DIV= p_width;
        
		        var telValue = document.getElementById(elemID).value;
		        var myRandom=parseInt(Math.random()*99999999);  			//cache buster
		        http.open("GET", url + escape(telValue) + "&rand=" + myRandom + "&index_col=" + idx_col + "&ElemId=" + elemID + "&path_name_form=" + param_path, true);
		        http.onreadystatechange = handleHttpResponse;			        
		        http.send(null);
        }
        
        function loadrecord(record,elem_id,set_path_name) 
        {
                document.getElementById(elem_id).value = record;
                
                //formularz musi byc zawsze pierwszy !
                document.forms[0].action = set_path_name;  //ustawia numer strony porcjowania na pierwszy
                document.forms[0].submit();
        }
        
        function getHTTPObject() 
        {
		        var xmlhttp;
		        
		        /*@cc_on
		         @if (@_jscript_version >= 5)
		          try {
		              xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
		              } catch (e) {
		              try {
		                  xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
		                  } catch (E) {
		                  xmlhttp = false;
		                  }
		              } 
		         @else
		          xmlhttp = false;
		         @end @*/
		         
		         if (!xmlhttp && typeof XMLHttpRequest != 'undefined') 
		         {
			           try 
			           {
			               xmlhttp = new XMLHttpRequest();
			           } 
			           catch (e) 
			           {
			               xmlhttp = false;
			           }
		          }
		          return xmlhttp;
        }

        var http = getHTTPObject();   //Create the HTTP Object		

W pliku php w input podajac jakakolwiek litere wyswietla sie pod nim panel z wszystkimi elementami zaczynajacymi sie od podanej litery- zasada z bazy danych LIKE 'X%'

Tylko nie wiem dlaczego AJAX nie przechwytuje polskich znaków, walcze nagłókami (windows-1250 czy inne) ale dla niego to bez róznicy. Moze trzeba mu jakac jeszcze funkcje dokleic.. ?

Jak sobie z tym poradzic ???

0

Generalnie JS działa zawsze na UTF-8. Spróbuj użyć tego kodowania, powinno pomóc. Przy standardowym wyświetlaniu to przeglądarka konwertuje wszystko do UTF-8, a przy wysyłaniu do serwera na takie kodowanie, jakie ma ustawione na stronie - w przypadku AJAXa ten ostatni krok jest pomijany, gdyż to Ty generujesz zapytanie. Alternatywą jest samodzielna konwersja w JS, pytanie tylko po co...

0

nie moge uzyc UTF-8 poniwaz kodowanie bazy oraz aplikacji musi byc takie samo, w moim przypadku Windows-1250.

Jak sie wiec pozbyc szalonych pytajnikow, zastepujacych polskie znaki w AJAXie ???

0

W takim razie w kodzie JS obsługującym XMLHttpRequest zamieniaj wszystkie zmienne z UTF-8, które da Ci przeglądarka na tego nieszczęsnego Win-1250. Możesz też to robić po stronie serwera, ale wówczas musisz dodatkowo rozróżnić, co dostałeś z AJAXa w UTF-8, a co w Win-1250.

0

HMM no to pozamiatane bo nie mam pojecia jak to zrobic....

0

A więc tak. Jeśli zdecydujesz się na JS, to chyba jedyną opcją jest zastosowanie jakiegoś replace'a ze wszystkimi polskimi znaczkami (jeśli tylko tego dotyczy problem, to masz prosto, bo jest ich raptem kilkanaście, licząc i duże i małe litery). Jeśli potrzebujesz czegoś konwertującego w szerszym zakresie, to możesz poszukać jakiejś takiej funkcji, może już ktoś to zrobił.

Jeśli zdecydujesz się na stronę serwera: dodajesz parametr wywołania skryptu (dla przykładu ajax=true, albo coś w ten deseń) do zapytania. Następnie stosujesz konwersję po stronie serwera (najprościej iconv, jeśli jednak tego nie ma, to są różnorodne biblioteki do PHP zajmujące się zmianą kodowania, multum tego w necie. Z kombajnów mogę polecić http://www.phpclasses.org/browse/file/5131.html - jest to dość duże ale sprawne i działa - przetestowane empirycznie).

0

Dzikei iconv pomoglo, ale został mały kłopocik, dokladnie taki sam jak w podnym nizej linku

http://forum.php.pl/index.php?s=057e830b3e72b7d24cb8d7b552a88b3c&showtopic=77795&st=0&p=398651&#entry398651

Gdy podaje np. "ł" to z GETa odbieram dokładnie coś takiego %u0142

0

Sprobowaem zrobic cos takiego :

<?php //------------------------------------------------------------- # Polskie znaki w Unicode # Ą - %u0104 ą - %u0105 # Ć - %u0106 ć - %u0107 # Ę - %u0118 ę - %u0119 # Ł - %u0141 ł - %u0142 # Ń - %u0143 ń - %u0144 # Ó - %u00d3 ó - %u00f3 # Ś - %u015a ś - %u015b # Ż - %u017B ż - %u017C # Ź - %u0179 ż - %u017A //------------------------------------------------------------- $tab_PL["%u0104"]= iconv("WINDOWS-1250","UTF-8","Ą"); $tab_PL["%u0105"]= iconv("WINDOWS-1250","UTF-8","ą"); $tab_PL["%u0106"]= iconv("WINDOWS-1250","UTF-8","Ć"); $tab_PL["%u0107"]= iconv("WINDOWS-1250","UTF-8","ć"); $tab_PL["%u0118"]= iconv("WINDOWS-1250","UTF-8","Ę"); $tab_PL["%u0119"]= iconv("WINDOWS-1250","UTF-8","ę"); $tab_PL["%u0141"]= iconv("WINDOWS-1250","UTF-8","Ł"); $tab_PL["%u0142"]= iconv("WINDOWS-1250","UTF-8","ł"); $tab_PL["%u0143"]= iconv("WINDOWS-1250","UTF-8","Ń"); $tab_PL["%u0144"]= iconv("WINDOWS-1250","UTF-8","ń"); $tab_PL["%u00d3"]= iconv("WINDOWS-1250","UTF-8","Ó"); $tab_PL["%u00f3"]= iconv("WINDOWS-1250","UTF-8","ó"); $tab_PL["%u015a"]= iconv("WINDOWS-1250","UTF-8","Ś"); $tab_PL["%u015b"]= iconv("WINDOWS-1250","UTF-8","ś"); $tab_PL["%u017B"]= iconv("WINDOWS-1250","UTF-8","Ż"); $tab_PL["%u017C"]= iconv("WINDOWS-1250","UTF-8","ż"); $tab_PL["%u0179"]= iconv("WINDOWS-1250","UTF-8","Ź"); $tab_PL["%u017A"]= iconv("WINDOWS-1250","UTF-8","ź"); $tab_PL= array_flip($tab_PL); //echo "
"; print_r($tab_PL); echo "
"; $param_GET= trim($_GET['param']); $klucz_pl= array_search($param_GET,$tab_PL); if( $klucz_pl ) { $param_GET= str_ireplace($tab_PL[$klucz_pl], $klucz_pl, $param_GET); } ?>

teraz widze "ł" ale niestety brak wyniku dla zapytania :

SELECT Nazwa FROM contractor WHERE (Nazwa LIKE '{$param_GET}%')

a są nazwy w bazie rozpoczynające się "ł" i inne, co tak naprawde dostaje $param_GET skoro nie to co widze.. ????

0

porzuć w ogóle pojęcie kodowania, ustaw se w bazie kodowanie binary i debuguj zapytanie w hexie

(to nie jest rozwiązanie problemu tylko sposób na to żebyś zaczął myśleć i nigdy nie zadawał podobnych pytań)

0

zrobilem... ;))

wystarczy usunac iconv z tablicy i wstawic jako wartosc don normalnie "ł". System bedzie widzial kazda polska literke jako "?" po wyswietleniu tablicy czy zapytania ale pod nia kryje sie prawidolowa literka.

Wczesniej oczywiscie nalezy jeszcze podmienic %u179 na "ł" (?) i sukces ...

Serdecznie dziekuje wszystkim za pomoc, procz ostatniego usera ktory przekombinowal juz na maksa- nie moge tego zrobic jesli baza danych jest firmowa !!!

0

Do zamiany %coś na odpowiedni znaczek - polecam urldecode. Aczkolwiek sądząc z manuala nie zamienia on znaczków unikodowych zapisanych w ten niestandardowy sposób :/ Powinno być %xx%xx...

1 użytkowników online, w tym zalogowanych: 0, gości: 1