Stránka: 1 z 1
| [ Príspevkov: 28 ] | |
Autor | Správa |
---|
Registrovaný: 23.12.10 Prihlásený: 06.10.15 Príspevky: 331 Témy: 130 | 130 Bydlisko: 054 01 Levoča |
Ahojte. Mám jeden problém ktorému nemôžem prísť na koreň. Problém je v tom že táto otázka je širokospektrálna. Mám chat v ktorom odosielam správu cez ajax ktorý pošle požiadavku php ktorí ju odošle do sql a zároveň vypíše všetky správy "pošli ich ajaxu" ten ich príjime a vypíše na stránke. Všetko by fungovalo až na to, že sa nezachová diakritika.
Živá ukážka: http://www.blazej44800.php5.sk
Meno: aké chcete
Heslo: pcforum
Otázka znie: kde všade treba nastavovať chrsety abo som tento problém vyrisiešil? pri všetkých scriptoch ich mám v mete tak isto
Ďakujem za každý nápad.
P.S. ten chat je vovývoji
_________________ ASUS EeePc 1002HA 1GB RAM 120GB HDD Intel Atom N270 1,60GHz |
|
Registrovaný: 03.04.08 Prihlásený: 10.12.19 Príspevky: 4667 Témy: 37 | 37 Bydlisko: Trnava |
este uloz aj subory v spravnom kodovani + databaza
_________________ Hmmm .... Hrošíček ... [Homer] |
|
Registrovaný: 23.12.10 Prihlásený: 06.10.15 Príspevky: 331 Témy: 130 | 130 Bydlisko: 054 01 Levoča |
Všade na začiatku súboru mám:
Kód: <META HTTP-EQUIV="Content-Type" CONTENT="text/html;charset=windows-1250"> V každom PHP mám: Kód: header('Content-Type: text/html; charset=windows-1250'); Každý script sa začína: Kód: <SCRIPT charset="widnows-1250">
Ešte neviem kde čo môže byť
_________________ ASUS EeePc 1002HA 1GB RAM 120GB HDD Intel Atom N270 1,60GHz |
|
Registrovaný: 29.10.08 Prihlásený: 30.07.12 Príspevky: 933 Témy: 2 | 2 |
no a databaza ti pracuje v akej kodovej stranke ?
|
|
Registrovaný: 23.12.10 Prihlásený: 06.10.15 Príspevky: 331 Témy: 130 | 130 Bydlisko: 054 01 Levoča |
Súbor na spojenie s db vyzerá takto:
Kód: <?php $link = mysql_pconnect ("localhost" , "root", "heslo") or die ("Nepodarilo sa spojiť zo serverom"); $db = mysql_select_db("chat", $link) or die ("Spojenie z databázov nefunguje"); // nastavenie znakovej sady @mysql_query ("SET NAMES CP1250"); ?>
_________________ ASUS EeePc 1002HA 1GB RAM 120GB HDD Intel Atom N270 1,60GHz |
|
Registrovaný: 11.08.07 Príspevky: 4088 Témy: 34 | 34 Bydlisko: Brno |
Toto sprav: don jebot píše: este uloz aj subory v spravnom kodovani + databaza
|
|
Registrovaný: 23.12.10 Prihlásený: 06.10.15 Príspevky: 331 Témy: 130 | 130 Bydlisko: 054 01 Levoča |
Toto všetko mám. Každú bunku mám nastavenú na cp1250_general_ci. I celú databázu. A ten súbor to ako myslíte? Tu META hlavičku či niečo iné?
_________________ ASUS EeePc 1002HA 1GB RAM 120GB HDD Intel Atom N270 1,60GHz |
|
Registrovaný: 03.04.08 Prihlásený: 10.12.19 Príspevky: 4667 Témy: 37 | 37 Bydlisko: Trnava |
priamo v textovom editore si pozri kodovanie suboru pravdepodobne ho mas na UTF nastaveny.
_________________ Hmmm .... Hrošíček ... [Homer] |
|
Registrovaný: 29.10.08 Prihlásený: 30.07.12 Príspevky: 933 Témy: 2 | 2 |
blazej44800 ako vyzeraju data v databaze ? su spravne ?
|
|
Registrovaný: 23.12.10 Prihlásený: 06.10.15 Príspevky: 331 Témy: 130 | 130 Bydlisko: 054 01 Levoča |
coldak píše: blazej44800 ako vyzeraju data v databaze ? su spravne ? data sú taktiež v chybnej diakritike. Zistil som, že problém je v ajaxe. Ako mu mám nastaviť charset?
_________________ ASUS EeePc 1002HA 1GB RAM 120GB HDD Intel Atom N270 1,60GHz |
|
Registrovaný: 29.10.08 Prihlásený: 30.07.12 Príspevky: 933 Témy: 2 | 2 |
nenastavis, pokial detekuje non ascii znaky tak pouzije escapeovanie ale interne pracuje iba s utf8, takze bud si to nejak osetris na strane php alebo vsetko prerobis na utf8
|
|
Registrovaný: 23.12.10 Prihlásený: 06.10.15 Príspevky: 331 Témy: 130 | 130 Bydlisko: 054 01 Levoča |
Inak by to nešlo? Prerábka na UTF-8 by bola asi veľmi rozsiahla.
_________________ ASUS EeePc 1002HA 1GB RAM 120GB HDD Intel Atom N270 1,60GHz |
|
Registrovaný: 29.10.08 Prihlásený: 30.07.12 Príspevky: 933 Témy: 2 | 2 |
no ved ti hovorim ze si to mozes skusit konvertovat na strane php
|
|
Registrovaný: 23.12.10 Prihlásený: 06.10.15 Príspevky: 331 Témy: 130 | 130 Bydlisko: 054 01 Levoča |
No skúsil som to ale teraz sa mi zobrazuje i meno a čas blbo.
P.S. všetko to skúšam na HDD. Na tej stránke sa to nemení
_________________ ASUS EeePc 1002HA 1GB RAM 120GB HDD Intel Atom N270 1,60GHz |
|
Registrovaný: 29.10.08 Prihlásený: 30.07.12 Príspevky: 933 Témy: 2 | 2 |
no ale ved nekonvertuj meno a cas, ale iba text spravy
|
|
Registrovaný: 23.12.10 Prihlásený: 06.10.15 Príspevky: 331 Témy: 130 | 130 Bydlisko: 054 01 Levoča |
A aky prikaz mam pouzit?
_________________ ASUS EeePc 1002HA 1GB RAM 120GB HDD Intel Atom N270 1,60GHz |
|
Registrovaný: 11.08.07 Príspevky: 4088 Témy: 34 | 34 Bydlisko: Brno |
/ajax_function.php?akcia=chat vypluva text v UTF-8, tam je problem. Skontroluj si, ci je tento subor ulozeny vo Windows-1250, to sa robi v textovom editore (niektore editory to maju v menu Format, nenapisal si, aky pouzivas). Okrem toho si otvor phpMyAdmina, prezri strukturu tabulky s datami a pozri sa, ci naozaj je v kodovani cp1250.
Mimochodom atribut charset elementu <script> je zbytocny.
|
|
Registrovaný: 23.12.10 Prihlásený: 06.10.15 Príspevky: 331 Témy: 130 | 130 Bydlisko: 054 01 Levoča |
Súbor ajax_function.php má na začiatku header('Content-Type: text/html; charset=windows-1250');
Ale ono to preto vypise vsetko v utf-8 preto lebo i v DB. Pritom do DB zapisuje ten subor ajax_function. a on kodovanie ma. Problem je, že prichadzaju do ajax_function zle data z ajaxu
_________________ ASUS EeePc 1002HA 1GB RAM 120GB HDD Intel Atom N270 1,60GHz |
|
Registrovaný: 29.10.08 Prihlásený: 30.07.12 Príspevky: 933 Témy: 2 | 2 |
mozes sem dat zdrojak ajax_function.php ?
|
|
Registrovaný: 23.12.10 Prihlásený: 06.10.15 Príspevky: 331 Témy: 130 | 130 Bydlisko: 054 01 Levoča |
Kód: <? //kontrola session_start(); header('Content-Type: text/html; charset=windows-1250'); include "db.php"; $sid = session_id(); $ip = $_SERVER["REMOTE_ADDR"];
$result_user = mysql_query("SELECT * FROM user WHERE id=\"".$_SESSION["id"]."\"", $link) or die ("Chyba!"); $user = mysql_fetch_array($result_user);
$result_room = mysql_query("SELECT * FROM room WHERE id=\"".$_SESSION["miestnost"]."\"", $link) or die ("Chyba!"); $room = mysql_fetch_array($result_room);
if ($_SESSION["id"] == $user["id"] and $_SESSION["sid"] == $sid and $_SESSION["ip"] == $ip and $_SESSION["miestnost"] == $user["miestnost"]) {
if ($_REQUEST["akcia"] == "history") {mysql_query("UPDATE $room[tabulka] SET view=\"0\" WHERE view=\"1\"", $link);} if ($_REQUEST["akcia"] == "odoslat" and $_REQUEST["text"] != "") {
$cas = time(); $ip = $_SERVER["REMOTE_ADDR"]; $od = $user["meno"]; $text = $_REQUEST["text"]; $text = nl2br($text);
$oprava = "INSERT INTO $room[tabulka] (od,ip,cas,text,view)VALUES ('$od','$ip','$cas','$text','1')"; $dooprava = mysql_query($oprava, $link) or die ("Chyba!");
$casformat = date("d.m.Y H:i:s", $cas); $idmessage = mysql_insert_id();
} if ($_REQUEST["akcia"] == "chat") { $last_id = $_REQUEST["last_id"]; $dotaz = mysql_query("SELECT * FROM $room[tabulka] WHERE view = \"1\" ORDER BY id desc", $link); while ($vytah = mysql_fetch_array($dotaz)): $vysledok = $vysledok.'<DIV class=glass-item id='.$vytah["id"].'><TABLE><TR><TD width=140><B>'.$vytah["od"].'</B><BR>'.date("d.m.Y H:i:s", $vytah["cas"]).'</TD><TD>'.$vytah["text"].'</TD></TR></TABLE></DIV>'; endwhile; echo $vysledok;
}
if ($_REQUEST["akcia"] == "user") { $i = 0; $vytiahnutie = mysql_query("SELECT * FROM `user` WHERE miestnost=\"".$_SESSION["miestnost"]."\"", $link); while ($vytah = mysql_fetch_array($vytiahnutie)): $vysledok = $vysledok.'<DIV class=user><LI>'.$vytah["meno"].'</LI></DIV>'; $i++; endwhile; $vysledok = "<UL>".$vysledok."</UL>"; echo "{ \"vysledok\": \"$vysledok\", \"ludi\": \"$i\" }"; }
if ($_REQUEST["akcia"] == "aktivita") { $time = time(); $oprava = "UPDATE user SET aktivita=\"".$time."\" WHERE id=\"".$user["id"]."\""; mysql_query($oprava, $link) or die ("Chyba!"); }
} else {echo "Session ERROR - hodnoty sa nezhodujú!!!";} ?>
Dúfam že tu nie sú žiadne dôveryhodné data
_________________ ASUS EeePc 1002HA 1GB RAM 120GB HDD Intel Atom N270 1,60GHz |
|
Registrovaný: 11.08.07 Príspevky: 4088 Témy: 34 | 34 Bydlisko: Brno |
Dobre, este raz ti to zhrniem, napisem posledny svoj prispevok do tejto temy. Mna nebavi dookola omielat to iste, ked polovicu kazdeho prispevku odignorujes.
- Je velka chyba mat v aplikacii dve rozne kodovania. Prerob system tak, aby bolo vsade jedno a to iste kodovanie, najlepsie UTF-8, ale pokial ti vyhovuje Windows-1250, moze byt. Vsade, to znamena nasledovne:
- Kazdy jeden subor musi byt ulozeny v tvojom kodovani. Co to znamena a ako sa to robi, si bud vygoogli, alebo pohladaj v svojom editore, alebo sa opytaj. Stale si ale nenapisal, v com pises kody. Taky Notepad++ alebo PSPad ma volbu kodovania v menu Format. Opakujem, kazdy jeden subor.
- To iste kodovanie uvedies v <meta>, alebo v Content-type HTTP hlavicke pomocou fcie header().
- V takom istom kodovani sa musia ukladat data do databazy. Otvor si strukturu tabulky v phpMyAdmine a nastav to spravne - daj pozor, ze rozlicne kodovania sa daju nastavit pre celu databazu, jednu tabulku, ale aj jeden stlpec v tabulke. Bude sa hodit, ked zmazes zaznamy, ktore boli v tabulke predtym (TRUNCATE TABLE tabulka).
- Prva query samozrejme SET NAMES tvojekodovanie.
- Zbav sa akychkolvek zbytocnosti ako PHP fcii na konverziu kodovani alebo atributov charset v <script>e.
Snad som nezabudol na nic. Komunikacia Ajaxom respektuje kodovanie HTML suboru, takze v tomto problem byt nemoze. Malo by ti vsetko fungovat, ak nebudes ohrnat nosom, ze to a to by bolo rozsiahle, tak to neurobim, a ak nebudes preskakovat niektore body z dovodu, ze nevies, ako sa to robi. Drzim palce.
|
|
Registrovaný: 23.12.10 Prihlásený: 06.10.15 Príspevky: 331 Témy: 130 | 130 Bydlisko: 054 01 Levoča |
OK. Inak robím v Golden HTML Editore 4.8.3. Český freeware WYSIWYG editor. V ňom MÁM nastavené CP1250
_________________ ASUS EeePc 1002HA 1GB RAM 120GB HDD Intel Atom N270 1,60GHz |
|
Registrovaný: 29.10.08 Prihlásený: 30.07.12 Príspevky: 933 Témy: 2 | 2 |
Kód: <html> <head> <META HTTP-EQUIV="Content-Type" CONTENT="text/html;charset=iso8859-2"> </head> <body> <script>alert(escape('ľščťžýáíé'));</script> </body> </html>
ulozene na disk ako iso8859-2 a po spusteni mi alert zobrazi:
%u013E%u0161%u010D%u0165%u017E%FD%E1%ED%E9
tupy JS netusi ze ascii kod podla iso8859-2 znaku ľ je %BE a nie %u013E
|
|
Registrovaný: 11.08.07 Príspevky: 4088 Témy: 34 | 34 Bydlisko: Brno |
coldak, nie Javascript je tupy. "The escape function returns the hexadecimal encoding of an argument in the ISO Latin character set." - koduje sa to nezavisle od kodovania. Ak chces ziskat kod znaku zo stringu, pouzi metodu String.charCodeAt(). Navyse iso8859-2 nie je platny zapis kodovania a nemusi fungovat v niektorych prehliadacoch, spravny zapis je iso-8859-2.
|
|
Registrovaný: 29.10.08 Prihlásený: 30.07.12 Príspevky: 933 Témy: 2 | 2 |
ja nechcem ziskat ascii kod znaku ale poukazat ze JS nie vzdy akceptuje kodovanie stranky . ajax pri odosielani dat tiez vykonava escapeovanie a tudiz windows1250 prevadza na unicode escape sequencie ktore si php nespravne konvertuje a do db zapisuje bludy
|
|
Registrovaný: 23.12.10 Prihlásený: 06.10.15 Príspevky: 331 Témy: 130 | 130 Bydlisko: 054 01 Levoča |
Čiže aké je riešenie? Mám taký pocit, že už aj vy máte v tom chaos.
_________________ ASUS EeePc 1002HA 1GB RAM 120GB HDD Intel Atom N270 1,60GHz |
|
Registrovaný: 29.10.08 Prihlásený: 30.07.12 Príspevky: 933 Témy: 2 | 2 |
v ajaxe pouzivas get alebo post ?
|
|
Registrovaný: 23.12.10 Prihlásený: 06.10.15 Príspevky: 331 Témy: 130 | 130 Bydlisko: 054 01 Levoča |
Na odoslanie spravy do DB post // pridané po 1 hodine 3 minútach od posledného príspevku Problém vyrišený. Problém bol tam, že do php scriptu prichádzal text v kódovaní utf-8. Ten text stačilo preformátovať do windows-1250 a bolo to
Kód: $text = iconv("UTF-8","CP1250", $text);
Coldak: ďakujem
_________________ ASUS EeePc 1002HA 1GB RAM 120GB HDD Intel Atom N270 1,60GHz |
|
Stránka: 1 z 1
| [ Príspevkov: 28 ] | |
|