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
<http://december.com/html/4/element/meta.html http-equiv="Content-Type" content="text/html; charset=iso-8859-2" />
xmlHttp.overrideMimeType('text/html; charset=ISO-8859-2');
function process() { wiadomosc("Pobieranie wiadomości... Proszę Czekac"); try { xmlHttp.open("GET", serveradres, true); xmlHttp.onreadystatechange = ReServer; xmlHttp.send(null); xmlHttp.overrideMimeType('text/html; charset=ISO-8859-2'); } catch(e) { errorwiadomosc(); } }
<?php $query_kod = "SET NAMES latin2"; $result = $this->mMysqli->query($query_kod); ?>
<?php public function Ajax() { http://www.php.net/usleep(25000); //KODOWANIE ZNAKÓW $query_kod = "SET NAMES latin2"; $result = $this->mMysqli->query($query_kod); $query = 'SELECT * FROM sb_wpis'; $result = $this->mMysqli->query($query); $dane = $result->fetch_array(MYSQLI_ASSOC); $result->close(); $id = http://www.php.net/stripslashes($dane['id']); $data = http://www.php.net/stripslashes($dane['data']); $tresc = http://www.php.net/stripslashes($dane['tresc']); $autor = http://www.php.net/stripslashes($dane['autor']); $wiadomosc = '['. $data .']'. $tresc .'-'. $autor.'.'; return $wiadomosc; } ?>
Ładnie
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:
<?php <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2" /> xmlHttp.overrideMimeType('text/html; charset=ISO-8859-2'); ?>
<?php $query_kod = "SET NAMES latin2"; ?>
<?php $query_kod = "SET NAMES `atin2"; //a powinno być $query_kod = "SET NAMES latin2"; ?>
Poprawione
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.
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:
<?php http://www.php.net/ob_start(); ?> ... <?php $text = iconv("ISO-8859-2", "UTF-8", http://www.php.net/ob_get_contents()); http://www.php.net/ob_clean(); http://www.php.net/echo $text; ?>
<?php function prepare($text) { $text = iconv("UTF-8", "ISO-8859-2", $text); return $text; } ?>
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
<?php http://www.php.net/header("Content-type: text/xml; charset=UTF-8"); http://www.php.net/echo '<?xml version="1.0" encoding="UTF-8"?>'; http://www.php.net/echo '<answer>'.$_REQUEST['data'].'</answer>'; ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <http://december.com/html/4/element/html.html xmlns="http://www.w3.org/1999/xhtml"> <http://december.com/html/4/element/head.html> <http://december.com/html/4/element/meta.html http-equiv="Content-Type" content="text/html; charset=utf-8" /> <http://december.com/html/4/element/title.html>Untitled Document</http://december.com/html/4/element/title.html> <http://december.com/html/4/element/script.html type="text/javascript" src="ajax.js"></http://december.com/html/4/element/script.html> </http://december.com/html/4/element/head.html> <http://december.com/html/4/element/body.html> <http://december.com/html/4/element/form.html action="java script:setValue()"> <http://december.com/html/4/element/input.html type="text" id="te" value="śśśśćźłśóśłśęę"/> <http://december.com/html/4/element/input.html type="submit" /> </http://december.com/html/4/element/form.html> <http://december.com/html/4/element/div.html id="asasd"></http://december.com/html/4/element/div.html> <http://december.com/html/4/element/br.html/> <http://december.com/html/4/element/script.html type="text/javascript"> function setValue(){ advAJAX.get({ url: "php.php?data="+document.getElementById('te').value, onSuccess : function(obj) { document.getElementById('asasd').innerHTML = obj.responseText; } }); } </http://december.com/html/4/element/script.html> </http://december.com/html/4/element/body.html> </http://december.com/html/4/element/html.html>
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.
<http://december.com/html/4/element/meta.html http-equiv="Content-Type" content="text/html; charset=iso-8859-2" />
<?php http://www.php.net/mysql_query("SET NAMES latin2"); ?>
xmlHttp.overrideMimeType('text/html; charset=ISO-8859-2');
Ja ze swojej strony chciałbym zauważyć, że skoro:
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.
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:
<?php xmlHttp.overrideMimeType('text/html; charset=ISO-8859-2'); ?>
<?php obj.xmlHttpRequest.overrideMimeType('text/html; charset=ISO-8859-2'); ?>
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!
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:
<?php function charset_utf_fix($string) { $utf_iso = http://www.php.net/array( "xc4x85" => "xb1", "xc4x84" => "xa1", "xc4x87" => "xe6", "xc4x86" => "xc6", "xc4x99" => "xea", "xc4x98" => "xca", "xc5x82" => "xb3", "xc5x81" => "xa3", "xc3xb3" => "xf3", "xc3x93" => "xd3", "xc5x9b" => "xb6", "xc5x9a" => "xa6", "xc5xba" => "xbc", "xc5xb9" => "xac", "xc5xbc" => "xbf", "xc5xbb" => "xaf", "xc5x84" => "xf1", "xc5x83" => "xd1", // xmlhttprequest uses different encoding "%u0104" => "xA1", "%u0106" => "xC6", "%u0118" => "xCA", "%u0141" => "xA3", "%u0143" => "xD1", "%u00D3" => "xD3", "%u015A" => "xA6", "%u0179" => "xAC", "%u017B" => "xAF", "%u0105" => "xB1", "%u0107" => "xE6", "%u0119" => "xEA", "%u0142" => "xB3", "%u0144" => "xF1", "%u00D4" => "xF3", "%u015B" => "xB6", "%u017A" => "xBC", "%u017C" => "xBF" ); return http://www.php.net/str_replace(http://www.php.net/array_keys($utf_iso), http://www.php.net/array_values($utf_iso), $string); } ?>
<?php http://www.php.net/header('Content-Type: text/html; charset=ISO-8859-2'); ?>
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ć...
Dla strony w ISO-8859-2.
Po stronie PHP:
<?php function AjaxISO($AStr) { $ARRPLISO = http://www.php.net/array('%B1','%E6','%EA', '%B3','%F1','%F3','%B6','%BC','%BF','%A1','%C6', '%CA','%A3','%D1','%D3','%A6','%AC','%AF'); $ARRPLUTF16JS = http://www.php.net/array("%u0105","%u0107","%u0119", "%u0142","%u0144","%u00F3","%u015B","%u017A","%u017C", "%u0104","%u0106","%u0118","%u0141","%u0143","%u00D3", "%u015A","%u0179","%u017B"); $AStr = http://www.php.net/urlencode($AStr); $AStr = http://www.php.net/str_replace($ARRPLISO, $ARRPLUTF16JS, $AStr); return $AStr; } ?>
function AjaxISO(tekst) { tekst = unescape(tekst); return tekst.replace(/\+/g, " "); } ... var tmp_req = AjaxISO(page_request.responseText);
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:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl"> <head> <meta http-equiv="Content-type" content="text/html; charset=utf-8" /> <title>Linkownia</title> <script type="text/javascript" src="scripts.js"></script> </head> <body> <? //laczenie z serwerem MySQL $link = http://www.php.net/mysql_pconnect('localhost', 'login', 'pass'); http://www.php.net/mysql_select_db("link"); http://www.php.net/mysql_query("SET NAMES utf8"); if (http://www.php.net/isset($_POST['login'])) { $err=''; if ($_POST['login']=='') $err='Login jest zbyt krótki'; if ($err=='') { $login = $_POST['login']; $result = http://www.php.net/mysql_query ("SELECT count(*) FROM users WHERE login = '$login'"); $row = http://www.php.net/mysql_fetch_array($result); if ($row['count(*)']>0) $err='Istnieje już użytkownik o takim loginie'; } if ($err=='') { http://www.php.net/mysql_query ("INSERT INTO users (login) VALUES ('$login')"); http://www.php.net/echo '<div class="ok">Rejestracja przebiegła poprawnie</div>'; return; } else http://www.php.net/echo '<div class="error">'.$err.'</div>'; } else { $_POST['login']=''; } ?> <form action="index.php" method="post"> <table> <tr><td>Login:</td><td><input type="text" onblur="kontrola_login()" id="login" name="login" /></td></tr> <tr><td></td><td><input type="submit" value="Wyślij formularz" /></td></tr> </table> </form> </body> </html>
<? if (http://www.php.net/isset($_GET['a'])) $a=$_GET['a']; else $a=''; //laczenie z serwerem MySQL $link = http://www.php.net/mysql_pconnect('localhost', 'login', 'pass'); http://www.php.net/mysql_select_db("link"); http://www.php.net/mysql_query("SET NAMES utf8"); if (http://www.php.net/isset($_GET['a'])) $a=$_GET['a']; else $a=''; $result = http://www.php.net/mysql_query ("SELECT count(*) FROM users WHERE login='$a'"); $row = http://www.php.net/mysql_fetch_array($result); http://www.php.net/echo $row['count(*)']; ?>
<?php if (window.XMLHttpRequest) { OAJAX = new XMLHttpRequest(); } else if (window.ActiveXObject) { OAJAX = new ActiveXObject("Microsoft.XMLHTTP"); } function kontrola_login() { if(OAJAX) { var l = document.getElementById('login'); OAJAX.open("GET", 'infoajax.php?a='+l.value); OAJAX.onreadystatechange = function() { if (OAJAX.readyState == 4) { if (OAJAX.responseText>0) { l.style.background="red"; l.focus(); } else { l.style.background="yellow"; } } } OAJAX.send(null); } } ?>
<?php if (window.XMLHttpRequest) { OAJAX = new XMLHttpRequest(); } else if (window.ActiveXObject) { OAJAX = new ActiveXObject("Microsoft.XMLHTTP"); } function kontrola_login() { if(OAJAX) { var l = document.getElementById('login'); OAJAX.open("POST", 'infoajax.php', true); OAJAX.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); OAJAX.onreadystatechange = function() { if (OAJAX.readyState == 4) { if (OAJAX.responseText>0) { l.style.background="red"; l.focus(); } else { l.style.background="yellow"; } } } OAJAX.send('a='+l.value); } } ?>
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
u mnie każdy plik jaki otwieram przez ajax zaczyna się od
http://www.php.net/header("Content-Type: text/html; charset=iso-8859-2");
function AJAX_pl_znaki($string) { $przed= http://www.php.net/array('%u0105','%u0107','%u0119','%u0142','%u0144','ó','%u015B','%u017A','%u017C', '%u0104','%u0106','%u0118','%u0141','%u0143','Ó','%u015A','%u0179','%u017B'); $po= http://www.php.net/array("ą","ć","ę","ł","ń","ó","ś","ź","ż", "Ą","Ć","Ę","Ł","Ń","Ó","Ś","Ź","Ż"); $string = http://www.php.net/str_replace($przed, $po, $string); return $string; }
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
oczywiście wszystko jest na utf-8,
przy wysyłaniu zapytania ajaxem: encodeURIComponent
przy odbieraniu przez php: rawurldecode
i nie ma żadnych krzaczków
Dzieki i przetestuje
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ć)
https://developer.mozilla.org/pl/Dokumentacja_języka_JavaScript_1.5/Funkcje/encodeURIComponent
hmm. rozpisać
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'%3b%29.value)
3) w php odbierając dane działasz $dane = rawurldecode($_GET['dane']);
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 ? 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
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
http://www.php.net/header('Content-Type: text/html; charset=utf-8');
<http://december.com/html/4/element/form.html accept-charset="utf-8">
function znaki_pl($string) { $przed= http://www.php.net/array('%u0105','%u0107','%u0119','%u0142','%u0144','%F3','%u015B','%u017A','%u017C', '%u0104','%u0106','%u0118','%u0141','%u0143','Ó','%u015A','%u0179','%u017B'); $po= http://www.php.net/array("ą","ć","ę","ł","ń","ó","ś","ź","ż", "Ą","Ć","Ę","Ł","Ń","Ó","Ś","Ź","Ż"); $string = http://www.php.net/str_replace($przed, $po, $string); return $string; } $txt=znaki_pl($txt);
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
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:
function toCode($string) { $string = http://www.php.net/preg_replace('/ę/', '{e}', $string); $string = http://www.php.net/preg_replace('/ó/', '{o}', $string); $string = http://www.php.net/preg_replace('/ą/', '{a}', $string); $string = http://www.php.net/preg_replace('/ś/', '{s}', $string); $string = http://www.php.net/preg_replace('/ł/', '{l}', $string); $string = http://www.php.net/preg_replace('/ż/', '{z}', $string); $string = http://www.php.net/preg_replace('/ź/', '{x}', $string); $string = http://www.php.net/preg_replace('/ć/', '{c}', $string); $string = http://www.php.net/preg_replace('/ń/', '{n}', $string); return $string; }
function toPolish(string) { string = string.replace('{e}', 'ę'); string = string.replace('{o}', 'ó'); string = string.replace('{a}', 'ą'); string = string.replace('{s}', 'ś'); string = string.replace('{l}', 'ł'); string = string.replace('{z}', 'ż'); string = string.replace('{x}', 'ź'); string = string.replace('{c}', 'ć'); string = string.replace('{n}', 'ń'); return string; }
Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)