Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

Forum PHP.pl _ XML, AJAX _ [AJAX] - Czyli artykuł na temat polskich znaków !

Napisany przez: SN@JPER^ 3.05.2007, 14:36:12

Przeszukując właśnie tematy tego forum pt. "polskie znaki w AJAX" doszedłem do wniosku, że napisze właśnie jak zapobiec "krzakom" w AJAX.

1. Pierwszą rzeczą, którą trzeba zrobic jest wstawienie meta tag np. w pliku index.html

  1. <http://december.com/html/4/element/meta.html http-equiv="Content-Type" content="text/html; charset=iso-8859-2" />


2. Następnie, w pliku np. ajax.js dodajemy linijkę kodu:

  1. xmlHttp.overrideMimeType('text/html; charset=ISO-8859-2');


U mnie wygląda to tak:

  1. function process()
  2. {
  3. wiadomosc("Pobieranie wiadomości... Proszę Czekac");
  4.  
  5. try
  6. {
  7. xmlHttp.open("GET", serveradres, true);
  8. xmlHttp.onreadystatechange = ReServer;
  9. xmlHttp.send(null);
  10. xmlHttp.overrideMimeType('text/html; charset=ISO-8859-2');
  11. }
  12.  
  13. catch(e)
  14. {
  15. errorwiadomosc();
  16. }
  17. }


3. przy pobieraniu danych z bazy w pliku np. ajax.class.php robimy zapytanie:

  1. <?php
  2. $query_kod = "SET NAMES latin2";
  3.  $result = $this->mMysqli->query($query_kod);
  4. ?>


najlepiej przed zapytaniem przy pobieraniu danych.

U mnie cała funkcja wygląda tak:

  1. <?php
  2. public function Ajax()
  3. {
  4.  http://www.php.net/usleep(25000);
  5.  
  6.  //KODOWANIE ZNAKÓW
  7.  
  8.  $query_kod = "SET NAMES latin2";
  9.  $result = $this->mMysqli->query($query_kod);
  10.  
  11.  
  12.  
  13.  $query = 'SELECT * FROM sb_wpis';
  14.  
  15.  $result = $this->mMysqli->query($query);
  16.  
  17.  $dane = $result->fetch_array(MYSQLI_ASSOC);
  18.  
  19.  $result->close();
  20.  
  21.  $id = http://www.php.net/stripslashes($dane['id']);
  22.  $data = http://www.php.net/stripslashes($dane['data']);
  23.  $tresc = http://www.php.net/stripslashes($dane['tresc']);
  24.  $autor = http://www.php.net/stripslashes($dane['autor']);
  25.  
  26.  
  27.  
  28.  $wiadomosc = '['. $data .']'. $tresc .'-'. $autor.'.';
  29.  return $wiadomosc;
  30.  
  31. }
  32. ?>


Myślę, że choć trochę pomogłem

Pozdrawiam.

Napisany przez: TomASS 4.05.2007, 08:26:15

Ładnie smile.gif

Ja swoją drogą, akurat korzystając z AJAXa mało razu miałem problemy z polskim znaczkami. Jak się zrobi wszystko w porządku i po kolei to nie powinno być problemu:


  1. <?php
  2. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2" />
  3. xmlHttp.overrideMimeType('text/html; charset=ISO-8859-2');
  4. ?>

i do tego ewentualnie:
  1. <?php
  2. $query_kod = "SET NAMES latin2";
  3. ?>



Jedyną literówką którą wychwyciłem to:
  1. <?php
  2. $query_kod = "SET NAMES `atin2";
  3. //a powinno być
  4. $query_kod = "SET NAMES latin2";
  5. ?>


Na pewno komuś się Twoja porada przyda smile.gif

Napisany przez: SN@JPER^ 4.05.2007, 09:50:50

Poprawione biggrin.gif

Napisany przez: NoiseMc 28.06.2007, 22:30:34

Ostatnio robie system komentarzy uzywajac Prototype.js. Kodowanie ... niestety musze uzywac ISO-8859-2. Przy wysylaniu formularza zauwazylem, ze XMLHttpRequest wysyla UTF nawet jezeli w opcjach Ajax.Request - Prototype ustawie ISO. Na serwerze przekodowuje sobie UTF na ISO ale srednio podoba mi sie takie wyjscie.

Napisany przez: tommy4 1.07.2007, 12:41:26

Pozwolę sobie tutaj napisać, że do polskich znaków w AJAXie można używać biblioteki iconv.

Strona PHP z której AJAX pobiera dane:

  1. <?php
  2.  
  3. http://www.php.net/ob_start();
  4.  
  5. ?>
  6. ...
  7. <?php
  8.  
  9. $text = iconv("ISO-8859-2", "UTF-8", http://www.php.net/ob_get_contents());
  10. http://www.php.net/ob_clean();
  11. http://www.php.net/echo $text;
  12.  
  13. ?>


Po wysłaniu danych np. POST, a przed dodaniem ich do bazy, trzeba je odpowiednio przygotować do niej:

  1. <?php
  2. function prepare($text)
  3. {
  4. $text = iconv("UTF-8", "ISO-8859-2", $text);
  5. return $text;
  6. }
  7. ?>

Napisany przez: deirathe 20.07.2007, 11:52:31

A ja mam taki problemik, używam advAjax wszystkie pliki maja kodowanie utf-8 i w takim sa zapisane php nawet wysyła nagłówek ale jak wysyłam dane przez formularz to w ie i tak mam krzaki zamiast polskich znaków. O co chodzi?
php.php

  1. <?php
  2. http://www.php.net/header("Content-type: text/xml; charset=UTF-8");
  3. http://www.php.net/echo '<?xml version="1.0" encoding="UTF-8"?>';
  4. http://www.php.net/echo '<answer>'.$_REQUEST['data'].'</answer>';
  5.  
  6. ?>

index.html
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <http://december.com/html/4/element/html.html xmlns="http://www.w3.org/1999/xhtml">
  3. <http://december.com/html/4/element/head.html>
  4. <http://december.com/html/4/element/meta.html http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. <http://december.com/html/4/element/title.html>Untitled Document</http://december.com/html/4/element/title.html>
  6. <http://december.com/html/4/element/script.html type="text/javascript" src="ajax.js"></http://december.com/html/4/element/script.html>
  7. </http://december.com/html/4/element/head.html>
  8.  
  9. <http://december.com/html/4/element/body.html>
  10. <http://december.com/html/4/element/form.html action="java script:setValue()">
  11. <http://december.com/html/4/element/input.html type="text" id="te" value="śśśśćźłśóśłśęę"/>
  12. <http://december.com/html/4/element/input.html type="submit" />
  13. </http://december.com/html/4/element/form.html>
  14. <http://december.com/html/4/element/div.html id="asasd"></http://december.com/html/4/element/div.html>
  15. <http://december.com/html/4/element/br.html/>
  16. <http://december.com/html/4/element/script.html type="text/javascript">
  17. function setValue(){
  18. advAJAX.get({
  19. url: "php.php?data="+document.getElementById('te').value,
  20. onSuccess : function(obj) { document.getElementById('asasd').innerHTML = obj.responseText; }
  21. });
  22. }
  23. </http://december.com/html/4/element/script.html>
  24. </http://december.com/html/4/element/body.html>
  25. </http://december.com/html/4/element/html.html>

//pod ff działa wyśmienicie

Napisany przez: andulka 7.08.2007, 21:19:39

A czy mógłby ktoś napisać, jak ustawić polskie znaki w skrypcie "Ajax dynamic list" ze strony: http://www.dhtmlgoodies.com/index.html?whichScript=ajax-dynamic-list.

  1. <http://december.com/html/4/element/meta.html http-equiv="Content-Type" content="text/html; charset=iso-8859-2" />

oraz

  1. <?php
  2. http://www.php.net/mysql_query("SET NAMES latin2");
  3. ?>

we właściwe miejsca wstawiłem, ale

  1. xmlHttp.overrideMimeType('text/html; charset=ISO-8859-2');

już nie wiem, gdzie w ajax.js umieścić sad.gif

Napisany przez: yarpo 21.08.2007, 22:36:36

Ja ze swojej strony chciałbym zauważyć, że skoro:

Kod
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2" />

kolega używa na końcu / to znaczy najprawdopodobniej, że DOCTYPE mówi XHTML. W takim wypadku wydaje mi się, że słuszniejszym byłoby:

Kod
<meta http-equiv="Content-type" content="application/xhtml+xml; utf-8" />

(oczywiście mam na myśli application/xhtml+xml;, nie utf)

O czym [m. in.] można przeczytać tu:
http://pornel.net/xhtml

Co do reszty - ciekawe, dzięki. Sporo się dowiedziałem smile.gif

Napisany przez: kaniagandzowski 10.09.2007, 12:07:31

Witam
Mam problem z kodowaniem znaków które ujawnia się przy wykorzystaniu AJAX.
Korzystam z biblioteki XAJAX, w której jest ustawione kodowanie na windows-1250 i to działa tzn. gdy jest aktualizowana strona przy pomocy AJAX, to tekst jest poprawnie wyświetlany z polskimi znakami lecz w tym tekście zawarty jest formularz z polami typu input.

Po wypełnieniu formularza i kliknięciu wyślij tekst w pisany w tych polach od razu jest rozwalony pojawia się takie coś – zamiast ala ma kota ąśół jest to ala ma kota ąśłó zami.

Dane z pól są wysyłane do metody w postaci tablicy przy pomocy takiego polecenia "xajax_xajax(xajax.getFormValues('nazwaformularza'));"
I metoda, które odbiera dane z formularza już dostaje błędne dane.

Eksperymentowałem z mianą danych w kodowaniu w bibliotece XAJAX
define ('XAJAX_DEFAULT_CHAR_ENCODING', 'windows-1250' );

na kodowanie iso-8859-2 -> efekt - tekst i tekst z pól formularza same krzaki
na kodowanie urf-8 to wartości z formularza było okej ale tekst wyświetlany przez AJAX był z krzakami.
kodwanie windows-1250 - jest poprawnie wyswietlany tekst lecz dane z formularza są w postaci krzaków.

Dodam że w każdej w szablonie widoku jest dodane kodowanie
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"><head>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2">

Szukałem rozwiązania na forum lecz poruszane tematy głównie tyczą się z problemami z bazą danych. A mój problem to z samą biblioteką XAJAX.




Udało mi się rozwiącać


$xajax = new xajax('/ajax/');
$xajax->setCharEncoding('ISO-8859-2');
$xajax->decodeUTF8InputOn();
$xajax->registerFunction("processKontaktForm");

...

function processKontaktForm($aFormValues)
{
$objResponse = new xajaxResponse();
$objResponse->setCharEncoding('ISO-8859-2');
$send_email_res = sendKontaktEmail($aFormValues);
}

Należy się upewnić czy program, w którym piszemy kod ma ustawione też kodowanie na ISO-8859-2. Np w Zend musiałem zmienić kodowanie domyślne dla projektu.

Napisany przez: lord_t 28.12.2007, 19:05:07

Witam,

też miałem problem z polskimi znakami. Używam http://advajax.anakin.us/index-pl.htm.
Andulka, może Ci to pomoże.

Nie pomogło mi dodanie w dwóch miejscach linijki:

  1. <?php
  2. xmlHttp.overrideMimeType('text/html; charset=ISO-8859-2');
  3. ?>


Polskie znaki pojawiły się dopiero po dodaniu:
  1. <?php
  2. obj.xmlHttpRequest.overrideMimeType('text/html; charset=ISO-8859-2');
  3. ?>


kod (zaczyna się około 283 linii)
CODE
if (obj.method == "POST" && typeof obj.xmlHttpRequest.setRequestHeader != "undefined") {
obj.xmlHttpRequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
obj.xmlHttpRequest.send(obj.queryString);
} else if (obj.method == "GET")
obj.xmlHttpRequest.send('');
};


zamieniłem na:
CODE
if (obj.method == "POST" && typeof obj.xmlHttpRequest.setRequestHeader != "undefined") {
obj.xmlHttpRequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
obj.xmlHttpRequest.send(obj.queryString);
obj.xmlHttpRequest.overrideMimeType('text/html; charset=ISO-8859-2');
} else if (obj.method == "GET"){
obj.xmlHttpRequest.send('');
obj.xmlHttpRequest.overrideMimeType('text/html; charset=ISO-8859-2');
}
};


I pomogło. Mam nadzieję, że komuś się to przyda.

edit: Działa w FF, w IE i Operze nie.

Napisany przez: ementos 15.01.2008, 16:00:15

WITAM! To mój pierwszy post na tym forum!
Od dawna mam problemy z polskimi znakami z bazy danych przez ajax'a!
Mam pytanie: o jakiej z bibliotek Ajaxa piszecie??
Ja znam "sajax", "advajax"(troszkę)
Z kąd mogę pobrać bibliotekę o której mowa w pierwszym poście?
Pozdrawiam!

Napisany przez: sarat20 17.02.2008, 03:11:11

Punkt drugi nie działa:
>> xmlHttp.overrideMimeType('text/html; charset=ISO-8859-2');)
wyskakuje bład, że metoda nie istnieje (testowane na IE i firefoxie).

Występowanie krzaczków w polskich literach można podzielić na 2 etapy:
1. Wysyłanie danych przez obiekt xmlhttprequest. Np przesyłam łańcuch znaków "wkrętarka" i w skrypcie php otrzymuję "wkr%u0119tarka". Do zamiany tych znaków używam poniższej funkcji:

  1. <?php
  2. function charset_utf_fix($string)
  3. {
  4. $utf_iso = http://www.php.net/array(
  5.  "xc4x85" => "xb1",
  6.  "xc4x84" => "xa1",
  7.  "xc4x87" => "xe6",
  8.  "xc4x86" => "xc6",
  9.  "xc4x99" => "xea",
  10.  "xc4x98" => "xca",
  11.  "xc5x82" => "xb3",
  12.  "xc5x81" => "xa3",
  13.  "xc3xb3" => "xf3",
  14.  "xc3x93" => "xd3",
  15.  "xc5x9b" => "xb6",
  16.  "xc5x9a" => "xa6",
  17.  "xc5xba" => "xbc",
  18.  "xc5xb9" => "xac",
  19.  "xc5xbc" => "xbf",
  20.  "xc5xbb" => "xaf",
  21.  "xc5x84" => "xf1",
  22.  "xc5x83" => "xd1",
  23. // xmlhttprequest uses different encoding
  24.  "%u0104" => "xA1",
  25.  "%u0106" => "xC6",
  26.  "%u0118" => "xCA",
  27.  "%u0141" => "xA3",
  28.  "%u0143" => "xD1",
  29.  "%u00D3" => "xD3",
  30.  "%u015A" => "xA6",
  31.  "%u0179" => "xAC",
  32.  "%u017B" => "xAF",
  33.  "%u0105" => "xB1",
  34.  "%u0107" => "xE6",
  35.  "%u0119" => "xEA",
  36.  "%u0142" => "xB3",
  37.  "%u0144" => "xF1",
  38.  "%u00D4" => "xF3",
  39.  "%u015B" => "xB6",
  40.  "%u017A" => "xBC",
  41.  "%u017C" => "xBF"
  42. );
  43. return http://www.php.net/str_replace(http://www.php.net/array_keys($utf_iso), http://www.php.net/array_values($utf_iso), $string);
  44. }
  45. ?>


Wystarczy druga częsć tablicy, pierwsza częsć działa przy dekodowaniu utf-8 w plikach/dokumentach, ale obiekt xmlhttprequest koduje dane w inny sposób.

2. Odbieranie danych przez obiekt xmlhttprequest. W skrypcie php należy wysłać nagłówek "Content-type":

  1. <?php
  2. http://www.php.net/header('Content-Type: text/html; charset=ISO-8859-2');
  3. ?>

Napisany przez: rafaelb 19.02.2008, 12:20:19

Cytat(lord_t @ 28.12.2007, 21:05:07 ) *
zamieniłem na:
CODE
if (obj.method == "POST" && typeof obj.xmlHttpRequest.setRequestHeader != "undefined") {
obj.xmlHttpRequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
obj.xmlHttpRequest.send(obj.queryString);
obj.xmlHttpRequest.overrideMimeType('text/html; charset=ISO-8859-2');
} else if (obj.method == "GET"){
obj.xmlHttpRequest.send('');
obj.xmlHttpRequest.overrideMimeType('text/html; charset=ISO-8859-2');
}
};


I pomogło. Mam nadzieję, że komuś się to przyda.
edit: Działa w FF, w IE i Operze nie.


Po dodaniu w FF 2.0.0.12
obj.responseXML has no properties" title="Zobacz w manualu PHP" target="_manual
a pod IE6
Obiekt nie obsługuje tej wlaściwości lub metody" title="Zobacz w manualu PHP" target="_manual

tylko że ja dodałem
Kod
obj.xmlHttpRequest.overrideMimeType('text/html; charset=UTF-8');

Napisany przez: krzysiek_raven 7.04.2008, 20:03:40

Witam.

Przez ostatniczas próbuję rozgryźć Ajaxa i mam teraz problem z kodowaniem znaków. W momencie gdy pobieram tekst lub wywołuje skrypt PHP poprzez Ajaxa, to pojawiają mi się krzaczki zamiast polskich znaków. Wszystkie pliki zapisuje w utf-8. Problem pojawia się tylko w przeglądarce Firefox. http://www.testyphpsql.yoyo.pl/AJAX/ jest stronka na której testuję. Wszytko mam ustawione na utf-8 i nie mam pojęcia czemu nie chce działać...

Napisany przez: inż. Piniol 13.08.2008, 09:20:38

Dla strony w ISO-8859-2.

Po stronie PHP:

  1. <?php
  2. function AjaxISO($AStr)
  3. {
  4.  $ARRPLISO = http://www.php.net/array('%B1','%E6','%EA',
  5. '%B3','%F1','%F3','%B6','%BC','%BF','%A1','%C6',
  6. '%CA','%A3','%D1','%D3','%A6','%AC','%AF');
  7.  $ARRPLUTF16JS = http://www.php.net/array("%u0105","%u0107","%u0119",
  8. "%u0142","%u0144","%u00F3","%u015B","%u017A","%u017C",
  9. "%u0104","%u0106","%u0118","%u0141","%u0143","%u00D3",
  10. "%u015A","%u0179","%u017B");
  11.  
  12.  $AStr = http://www.php.net/urlencode($AStr);
  13.  $AStr = http://www.php.net/str_replace($ARRPLISO, $ARRPLUTF16JS, $AStr);
  14.  return $AStr;
  15. }
  16. ?>


Zwracane teksty puszczamy przez powyższą funkcję.

Po stronie JS:

  1. function AjaxISO(tekst)
  2. {
  3. tekst = unescape(tekst);
  4. return tekst.replace(/\+/g, " ");
  5. }
  6.  
  7. ...
  8.  
  9. var tmp_req = AjaxISO(page_request.responseText);

Sprawdzone pod: IE 6/7, Firefox 2/3, Opera.

Napisany przez: andulka 25.08.2008, 12:55:56

Napotkałem dziwny problem, korzystam z ajaxa, aby sprawdzać dostępność loginu w bazie danych.

Po wpisywaniu nowego loginu, skrypt sprawdza, czy login już nie istnieje. Jeśli login istnieje, pole podświetla się na czerwono, jeśli nie, to pole podświetla się na źółto i można taki login dodać do bazy danych.
Jedyne, co nie działa, to sprawdzanie loginów z polskimi diakrytykami w Internet Explorerze (przez ajax). W FF i Operze działa znakomicie.

Skrypt oraz baza danych kodowane są w UTF-8.

Czy ktoś ma jakiś pomysł, żeby skrypt działał poprawnie pod IE ?
index.php:

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl">
  3. <head>
  4. <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
  5. <title>Linkownia</title>
  6. <script type="text/javascript" src="scripts.js"></script>
  7. </head>
  8. <body>
  9. <?
  10.  
  11. //laczenie z serwerem MySQL
  12. $link = http://www.php.net/mysql_pconnect('localhost', 'login', 'pass');
  13. http://www.php.net/mysql_select_db("link");
  14. http://www.php.net/mysql_query("SET NAMES utf8");
  15.  
  16. if (http://www.php.net/isset($_POST['login']))
  17. {
  18.  
  19. $err='';
  20.  
  21. if ($_POST['login']=='') $err='Login jest zbyt krótki';
  22. if ($err=='')
  23. {
  24.  
  25. $login = $_POST['login'];
  26.  
  27. $result = http://www.php.net/mysql_query ("SELECT count(*) FROM users WHERE login = '$login'");
  28. $row = http://www.php.net/mysql_fetch_array($result);
  29. if ($row['count(*)']>0) $err='Istnieje już użytkownik o takim loginie';
  30. }
  31.  if ($err=='')
  32.  {
  33.  
  34.  http://www.php.net/mysql_query ("INSERT INTO users (login) VALUES ('$login')");
  35.  http://www.php.net/echo '<div class="ok">Rejestracja przebiegła poprawnie</div>';
  36.  return;
  37. } else http://www.php.net/echo '<div class="error">'.$err.'</div>';
  38. } else {
  39. $_POST['login']='';
  40. }
  41.  
  42. ?>
  43.  
  44. <form action="index.php" method="post">
  45. <table>
  46. <tr><td>Login:</td><td><input type="text" onblur="kontrola_login()" id="login" name="login" /></td></tr>
  47. <tr><td></td><td><input type="submit" value="Wyślij formularz" /></td></tr>
  48. </table>
  49. </form>
  50.  
  51. </body>
  52. </html>


plik wykorzystywany przez ajax do zapytań w bazie danych: infoajax.php
  1. <?
  2. if (http://www.php.net/isset($_GET['a'])) $a=$_GET['a']; else $a='';
  3.  
  4. //laczenie z serwerem MySQL
  5. $link = http://www.php.net/mysql_pconnect('localhost', 'login', 'pass');
  6. http://www.php.net/mysql_select_db("link");
  7. http://www.php.net/mysql_query("SET NAMES utf8");
  8.  
  9.  
  10.  
  11. if (http://www.php.net/isset($_GET['a'])) $a=$_GET['a']; else $a='';
  12.  
  13.  $result = http://www.php.net/mysql_query ("SELECT count(*) FROM users WHERE login='$a'");
  14.  $row = http://www.php.net/mysql_fetch_array($result);
  15.  http://www.php.net/echo $row['count(*)'];
  16. ?>


obsługa ajaxa: scripts.js
  1. <?php
  2. if (window.XMLHttpRequest) 
  3. { 
  4.  OAJAX = new XMLHttpRequest(); 
  5. }
  6. else if (window.ActiveXObject) 
  7. { 
  8.  OAJAX = new ActiveXObject("Microsoft.XMLHTTP");
  9. }
  10.  
  11. function kontrola_login()
  12. {
  13.  if(OAJAX) 
  14.  {
  15. var l = document.getElementById('login');
  16.  
  17. OAJAX.open("GET", 'infoajax.php?a='+l.value);
  18.  
  19. OAJAX.onreadystatechange = function() 
  20. {
  21.  if (OAJAX.readyState == 4)
  22.  {
  23.  
  24.  if (OAJAX.responseText>0)
  25.  {
  26. l.style.background="red";
  27. l.focus();
  28.  
  29. } else
  30. {
  31. l.style.background="yellow";
  32. }
  33.  }
  34. } 
  35.  
  36. OAJAX.send(null); 
  37.  }
  38. }
  39. ?>


Update 2008.09.01.
Udało mi się rozwiązać problem.
W pliku scripts.js należy zamienić metodę GET na POST:

  1. <?php
  2. if (window.XMLHttpRequest) 
  3. { 
  4.  OAJAX = new XMLHttpRequest(); 
  5. }
  6. else if (window.ActiveXObject) 
  7. { 
  8.  OAJAX = new ActiveXObject("Microsoft.XMLHTTP");
  9. }
  10.  
  11. function kontrola_login()
  12. {
  13.  if(OAJAX) 
  14.  {
  15. var l = document.getElementById('login');
  16.  
  17. OAJAX.open("POST", 'infoajax.php', true);
  18.  OAJAX.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
  19.  
  20. OAJAX.onreadystatechange = function() 
  21. {
  22.  if (OAJAX.readyState == 4)
  23.  {
  24.  
  25.  if (OAJAX.responseText>0)
  26.  {
  27. l.style.background="red";
  28. l.focus();
  29.  
  30. } else
  31. {
  32. l.style.background="yellow";
  33. }
  34.  }
  35. } 
  36.  
  37. OAJAX.send('a='+l.value); 
  38.  }
  39. }
  40. ?>

Napisany przez: skowron-line 30.12.2008, 09:21:15

Wczoraj całkiem przypadkiem trafiłem na 2 funkcje które mogą pomóc w walce z polskimi znakami dla tych którzy się już poddali.
http://jdstiles.com/java/cct.html

Napisany przez: esiek 18.09.2009, 23:45:34

u mnie każdy plik jaki otwieram przez ajax zaczyna się od

  1. http://www.php.net/header("Content-Type: text/html; charset=iso-8859-2");



ale zauwazylem ze po dodaniu do MySQL danych z polskimi znakami mialem znaczku typu %u106 zamiast polskiej litery to napisalem prosta funkcje winksmiley.jpg

  1. function AJAX_pl_znaki($string)
  2. {
  3. $przed= http://www.php.net/array('%u0105','%u0107','%u0119','%u0142','%u0144','ó','%u015B','%u017A','%u017C',
  4. '%u0104','%u0106','%u0118','%u0141','%u0143','Ó','%u015A','%u0179','%u017B');
  5. $po= http://www.php.net/array("ą","ć","ę","ł","ń","ó","ś","ź","ż",
  6. "Ą","Ć","Ę","Ł","Ń","Ó","Ś","Ź","Ż");
  7.  
  8. $string = http://www.php.net/str_replace($przed, $po, $string);
  9. return $string;
  10. }
  11.  




przepuszczam przez nią zapisane już dane winksmiley.jpg

Pozdrawiam i mam nadzieje że komuś się przyda winksmiley.jpg

Napisany przez: rzymek01 19.09.2009, 09:09:12

za pierwszym razem też robiłem takie funkcje str_replace, ale potem się skapnąłem, że się nie opłaca, bo już są takie funkcje zrobione i mamy to za darmola smile.gif

oczywiście wszystko jest na utf-8,
przy wysyłaniu zapytania ajaxem: encodeURIComponent
przy odbieraniu przez php: rawurldecode

i nie ma żadnych krzaczków

Napisany przez: esiek 19.09.2009, 20:38:14

Dzieki i przetestuje smile.gif

Napisany przez: Eraden 22.09.2009, 11:03:07

Rzymek01, czy mógłbyś to rozpisać?
Jestem jeszcze zielony w AJAX i naprawdę jak to jest lepsze rozwiązanie to chciałbym je szczegółowo poznać zamiast dochodzić samemu (pewnie więcej bym się w ten sposób nauczył ale też mogę coś zwalić)

Napisany przez: erix 22.09.2009, 11:14:45

https://developer.mozilla.org/pl/Dokumentacja_języka_JavaScript_1.5/Funkcje/encodeURIComponent

Napisany przez: rzymek01 22.09.2009, 22:46:10

hmm. rozpisać smile.gif

przeczytaj co te funkcje robią i tak ogólnie:
1) masz formularz na stronie (nie wiem czy kodowanie/charset strony jest tutaj istotne, ale w każdym razie przy utf-8 działa)
2) przed wysłaniem żądania np. GET dane traktujesz encodeURIComponent, np. http://strona.com/ajax.php?dane=encodeURIComponent(document.getElementById('text_input&#39%3b%29.value)
3) w php odbierając dane działasz $dane = rawurldecode($_GET['dane']);

Napisany przez: marianooo 30.09.2010, 17:18:44

Witam, może ktoś rzeczowo i konkretnie napisać jakich zmian należy dokonać w formularzu AJAX CONTACT FORM tak ażeby w przychodzących mailach były polskie znaki questionmark.gif? Próbowałem różnych metod, także opisanych na tym forum ale nic nie dało rezultatu. Proszę o jakieś rzeczowe wyjaśnienie jak sobie z tym poradzić

Posiadam takie pliki:

index.php
contact.js
contact.php
functionaddevent.js
loading.gif
thumbs.db
xmlhttp.js
functionaddevent.php

Pliki można pobrać http://olbudbis.republika.pl/ajaxformularz.rar

Dziwna rzecz - jak ustawie azeby maile przychodziły na gmaila to w poczcie gmail mam polskie znaki - a na innych kontach nie mam

Napisany przez: blasq 2.12.2010, 23:13:45

Witam
chciałbym odnieść się do przesyłania polskich znaków w jQuery. Siedziałem nad tym 2 dni, nim doszedłem do tego, przeczytałem setki tematów i artykułów z tym związanych. Zamiast polskich znaków były tylko krzaczki. Może więc komuś się przyda...

chodzi o dodawanie komentarzy, przesyłanie GETem do pliku php, wpis do bazy, i zwracanie komentarza w rezultacie do dokumentu rodzica, gdzie jest on dynamicznie dopisywany do listy

moje rozwiązanie:
ustawić w meta kodowanie utf-8, zaś w wywoływanym w tle pliku php dodać nagłówek

  1. http://www.php.net/header('Content-Type: text/html; charset=utf-8');

pliki z kodem zapisać przy użyciu edytora tekstowego z kodowaniem UTF-8.
Co najważniejsze: do formularza dodać atrybut akceptowanego kodowania (pomijam inne atrybuty):

  1. <http://december.com/html/4/element/form.html accept-charset="utf-8">



jeśli to okaże się niewystarczające, można w pliku php dodać funkcję konwersji:

  1. function znaki_pl($string)
  2. {
  3. $przed= http://www.php.net/array('%u0105','%u0107','%u0119','%u0142','%u0144','%F3','%u015B','%u017A','%u017C',
  4. '%u0104','%u0106','%u0118','%u0141','%u0143','Ó','%u015A','%u0179','%u017B');
  5. $po= http://www.php.net/array("ą","ć","ę","ł","ń","ó","ś","ź","ż",
  6. "Ą","Ć","Ę","Ł","Ń","Ó","Ś","Ź","Ż");
  7.  
  8. $string = http://www.php.net/str_replace($przed, $po, $string);
  9. return $string;
  10. }
  11.  
  12. $txt=znaki_pl($txt);


zwracam uwagę na zmieniony ręcznie przeze mnie wpis dotyczący "ó" - długo nie mogłem dojść, dlaczego z tą jedną literą był wciąż problem...

pozdrawiam!

Napisany przez: mate006 10.10.2011, 17:08:30

Wiem że odkopuję stary temat, ale już mi głowa pęka od tego kombinowania.

A mianowicie co zrobić by dane z literą ó mi wyświetlało?

np.
$str = "mój pies";

To nic sie nie dzieję, jeśli jednak zrobię

$str =str_replace("ó", "o", $str);

to nie ma problemu i wszystko ładnie chodzi z innymi literami jest ok. czemu ta literka ó robi takie problemy?

Proszę pomóżcie, doradzcie coś bo mi już sił brak na walkę z tym. wszystkie te metody z tego forum już próbowałem jednak zero poprawy

Napisany przez: daniel1302 31.01.2012, 10:01:47

Dodaj od siebie 2 funkcje.
W JSON miałem mnóstwo problemów aby przesłać tekst z polskimi znakami. Raz udało mi się to ominąć, lecz gdy wysłałem pliki z localhosta na serwer to spowrotem to samo...
Funkcja w PHP:

  1. function toCode($string)
  2. {
  3. $string = http://www.php.net/preg_replace('/ę/', '{e}', $string);
  4. $string = http://www.php.net/preg_replace('/ó/', '{o}', $string);
  5. $string = http://www.php.net/preg_replace('/ą/', '{a}', $string);
  6. $string = http://www.php.net/preg_replace('/ś/', '{s}', $string);
  7. $string = http://www.php.net/preg_replace('/ł/', '{l}', $string);
  8. $string = http://www.php.net/preg_replace('/ż/', '{z}', $string);
  9. $string = http://www.php.net/preg_replace('/ź/', '{x}', $string);
  10. $string = http://www.php.net/preg_replace('/ć/', '{c}', $string);
  11. $string = http://www.php.net/preg_replace('/ń/', '{n}', $string);
  12. return $string;
  13. }

I oto gdy mamy taki tekst: Mój koleżka ma osę, Otrzymamy: M{o}j kole{z}ka ma os{e}, I tym sposobem JSON nic sie nam nie będzie rzucał, nie wytnie mam tekstu itp...

I funkcja odkodowująca dla JS:
  1. function toPolish(string)
  2. {
  3. string = string.replace('{e}', 'ę');
  4. string = string.replace('{o}', 'ó');
  5. string = string.replace('{a}', 'ą');
  6. string = string.replace('{s}', 'ś');
  7. string = string.replace('{l}', 'ł');
  8. string = string.replace('{z}', 'ż');
  9. string = string.replace('{x}', 'ź');
  10. string = string.replace('{c}', 'ć');
  11. string = string.replace('{n}', 'ń');
  12. return string;
  13. }


Która zwróci nam taki tekst jaki zakodowaliśmy.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)