Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [ajax] Kodowanie znaków w wywołaniu przez POST
Seth
post 31.05.2006, 08:36:15
Post #1





Grupa: Przyjaciele php.pl
Postów: 2 335
Pomógł: 6
Dołączył: 7.03.2002

Ostrzeżenie: (0%)
-----


Mam problem nad którym już 2 dni spędziłem.

Rozchodzi się o kodowanie znaków po wysłaniu danych POSTem przez XMLHTTPRequest.


Skrypt wygląda następująco:
1) Główna strona (fax.php) pobiera za pomocą XMLHTTPRequest wynik działania innej (editSMS.php) i umieszcza go w DIVie.
editSMS.php wyświetla formularz edycji.

2) Po zatwierdzeniu zmian w formularzu, strona fax.php, która wyświetla pobrany formularz z editSMS.php, przesyła za pomocą XMLHTTPRequest dane z formularza POSTem do editSMS.php.

3) editSMS.php pobiera dane przesłane POSTem, zapisuje je i ponownie wyświetla formularz, który to znowu wyświetla fax.php.


Do pobierania formularza, który wyświetla strone editSMS.php używam funkcji getAXAH() - elementContainer w tej funkcji to nazwa DIVa, w który zostanie wklejona treść pobranej strony.
Strona editSMS.php wypluwa TYLKO formularz HTMLowy.

Za pomocą postAXAH() wysyłam POSTem dane z formularza XMLHTTPRequestem do skryptu editSMS.php.
params w tej funkcji określa zbiór parametrów POSTa (czyli dane z formularza) w postaci var=val&var2=val2 etc..
Kod
        <script type="text/javascript">
            function getNewHttpObject() {
                var objType = false;
                try {
                    objType = new ActiveXObject('Msxml2.XMLHTTP');
                } catch(e) {
                    try {
                        objType = new ActiveXObject('Microsoft.XMLHTTP');
                    } catch(e) {
                        objType = new XMLHttpRequest();
                    }
                }
                return objType;
            }        
        
            function getAXAH(url,elementContainer){
                document.getElementById(elementContainer).innerHTML = '<blink class="redtxt">Ładowanie danych...<\/blink>';
                
                var theHttpRequest = getNewHttpObject();
                
                theHttpRequest.onreadystatechange = function() {processAXAH(elementContainer);};
                theHttpRequest.open("GET", url);
                theHttpRequest.setRequestHeader('Content-Type', 'text/html; charset=iso-8859-2');
                theHttpRequest.send(false);

            function processAXAH(elementContainer){
               if (theHttpRequest.readyState == 4) {
                   if (theHttpRequest.status == 200) {
                       document.getElementById(elementContainer).innerHTML = theHttpRequest.responseText;
                   } else {
                       document.getElementById(elementContainer).innerHTML="<p><span class='redtxt'>Error!<\/span> Opis błędu: " + theHttpRequest.statusText +"<\/p>";
                   }
               }
            }
            }
            
            function postAXAH(url, elementContainer, params) {
                document.getElementById(elementContainer).innerHTML = '<blink class="redtxt">Ładowanie danych...<\/blink>';
                
                var theHttpRequest = getNewHttpObject();
                
                theHttpRequest.onreadystatechange = function() {processAXAH(elementContainer);};
                theHttpRequest.open("POST", url);
                theHttpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=iso-8859-2');
                theHttpRequest.send(params);

            function processAXAH(elementContainer){
               if (theHttpRequest.readyState == 4) {
                   if (theHttpRequest.status == 200) {
                       document.getElementById(elementContainer).innerHTML = theHttpRequest.responseText;
                   } else {
                       document.getElementById(elementContainer).innerHTML="<p><span class='redtxt'>Error!<\/span> Opis błędu: " + theHttpRequest.statusText +"<\/p>";
                   }
               }
            }
            }
</script>


Powyższy kod leży w pliku fax.php, skąd odwołuje się do niego min. formularz z editSMS.php podczas kliknięcia na przycisk wysłania danych.


A teraz do rzeczy:
Podczas poberania formularza po przez getAXAH() kodowanie polskich znaków działa (dodatkowo w editSMS.php dodałem header z Content-typem ustawiający charset na iso-8859-2) - działa tzn. wyświetla polskie znaki w formularzu.

Problem jest dopiero gdy wyedytuje formularz i w jakieś pole wstawie polskie znaki. Wtedy po zapisaniu formularza (wysłania ich POSTem przez postAXAH()) - po wysłaniu, skrypt editSMS.php wyświetla ponownie formularz z nowymi danymi oraz infromacją o dodaniu danych - pojawiają się już krzaki.
Dokładnie to wygląda tak, że dane wysłane przez postAXAH() są w formacie utf-8 i takie też, trafiają do baz - stąd ponowne wyświetlenie formularza powoduje pokazanie krzaków.


Dodałem do setRequestHeader() charset iso-8859-2 i nadal nic.
Nie wiem jak to obsłużyć aby XMLHTTPReqest wysłało te dane zakodwane w iso a ne w utf'ie

Ma ktoś jakiś pomysł ? sad.gif
Go to the top of the page
+Quote Post
anopak
post 31.05.2006, 09:17:07
Post #2





Grupa: Zarejestrowani
Postów: 124
Pomógł: 0
Dołączył: 26.10.2004
Skąd: Rybnik

Ostrzeżenie: (0%)
-----


było już o takim problemie na forum:

cały temat

odpowiedź

dla leniwych:

  1. <?php
  2. header('Content-type: text/html; charset=UTF-8');
  3.  
  4. $opis=iconv('utf-8','iso-8859-2',$opis);
  5. //mb_convert_variables('ISO-8859-2', "ASCII,UTF-8,SJIS-win", $opis); jeżeli jest obsługa mb_convert....
  6. ?>


--------------------
Hardware: Celeron 3.06, 512 MB DDR
Software: Apache 2.0, MySQL 4.0, php 4.3.1, Zend 5.1, Firefox
Go to the top of the page
+Quote Post
Seth
post 31.05.2006, 10:01:25
Post #3





Grupa: Przyjaciele php.pl
Postów: 2 335
Pomógł: 6
Dołączył: 7.03.2002

Ostrzeżenie: (0%)
-----


Oops :/
Sorry za lenia i dzieki za linki.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 6.05.2024 - 06:31