Autor | Zpráva | ||
---|---|---|---|
Va-zo Profil * |
#1 · Zasláno: 16. 10. 2009, 12:29:11
Zdravím,
mám problémy s Ajaxem, konkrétně s češtinou. Jsem začátečník, co se týče Ajaxu a zkoušel jsem upravovat jeden zdroják chatu, ale nějak se mi nedaří, aby se do databáze ukládaly české znaky. Přikládám zdrojáky a předem děkuji za vaše rady. ajax.js subject_id = ''; function handleHttpResponse() { if (http.readyState == 4) { if (subject_id != '') { document.getElementById(subject_id).innerHTML = document.getElementById(subject_id).innerHTML+http.responseText; } } } 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) { alert('Error while creating ActiveX object'); xmlhttp = false; } } @else xmlhttp = false; @end @*/ if (!xmlhttp && typeof XMLHttpRequest != 'undefined') { try { xmlhttp = new XMLHttpRequest(); } catch (e) { alert('Error while creating XMLHttp Request object'); xmlhttp = false; } } return xmlhttp; } var http = getHTTPObject(); // We create the HTTP Object function.js function show_smilies(sender) { if(sender) { var getStyle = document.getElementById('tools').style.visibility; if(getStyle == "visible") document.getElementById('tools').style.visibility = "hidden"; else document.getElementById('tools').style.visibility = "visible"; } else { document.getElementById('tools').style.visibility = "hidden"; } } function add_code(code) { document.getElementById('text_content').value = document.getElementById('text_content').value + code; show_smilies(); document.getElementById('smilie').value = code; document.getElementById('smilie').value = code; } function get_message(div_id,sender) { setInterval ("get_new_message('"+div_id+"',"+sender+")", 1500 ); } function send_message(div_id,content_id,sender) { myDate1 = new Date(); timestamp1 = myDate1.getTime(); subject_id = div_id; content = document.getElementById(content_id).value; if(content.length) { document.getElementById(content_id).value = ""; document.getElementById(content_id).focus(); http.open("GET", "script_page.php?user="+sender+"&set=1&t="+timestamp1+"&content=" + escape(content), true); http.onreadystatechange = handleHttpResponse; http.send(null); } } function get_new_message(div_id,sender) { myDate = new Date(); timestamp = myDate.getTime(); subject_id = div_id; http.open("GET", "script_page.php?user="+sender+"&get=1&t="+timestamp+"", true); http.onreadystatechange = handleHttpResponse; http.send(null); } script_page.php <?php session_start(); Ob_start(); include('./conn.php'); header('Content-Type: text/html; charset=windows-1250'); if(isset($_GET['set'])) { if(isset($_GET['content'])) { //$str_msg = stripslashes($_POST['pripominky']); $str_msg = stripslashes($_GET['content']); $time = Date("d.m.Y H:i:s", Time()); $time2 = Date("Y-m-d H:i:s", Time()); $str_msg = add_smilies($str_msg); $t_stamp = $time; $user = $_SESSION['JMENO']; ($_GET['uid']=='1')? $color ="red" : $color ="green"; $insert1 = "INSERT INTO chat (user,msg,timestamp,displayed) VALUES ('".$_SESSION['JMENO']."', '".addslashes($str_msg)."', '$time2', '0')"; mysql_query($insert1); echo "<br><font color=$color><b>".$user." </b>[".$t_stamp."] <b>: </b></font>".$str_msg; } } else if(isset($_GET['get'])) { if($_GET['uid']=='1') { $uid = "2"; $color = "green"; } else { $uid = "1"; $color = "red"; } $get = "select * from chat where user= ".$uid." and displayed=0 ORDER BY timestamp DESC"; $res = mysql_query($get); $num_rows = mysql_num_rows($res); if($num_rows) { while($new_msg = mysql_fetch_array($res)) echo "<br><font color=\"$color\"><b>User ".$user." </b>[".$new_msg['timestamp']."] <b>: </b></font>".stripslashes($new_msg['msg']); $mark2 = mysql_query("update chat set displayed=1 where user=".$uid." and displayed=0"); } } else { echo "<font color=red><b><br>Chyba při zpracování dat...!</b></font>"; } function add_smilies($str_msg) { $get_smiles = mysql_query("select * from smilies order by length(image_code) desc"); while($row_smilies = mysql_fetch_array($get_smiles)) { $str_msg = str_replace(''.$row_smilies['image_code'].''," <img src='./images/".$row_smilies['id'].".gif'> ",$str_msg); //$str_msg = preg_match("/".$row_smilies['image_code']."/","<img src='./images/".$row_smilies['id'].".gif'>"); /*if(false !== strpos($row_smilies['image_code'],$str_msg)) { $sel = mysql_query("select * from smilies where image_code='".$row_smilies['image_code']."'"); $row = mysql_fetch_array($sel); echo "<img src='./images/".$row_smilies['id'].".gif'>"; }*/ } return $str_msg; } ?> index1.php <?php |
||
Va-zo Profil * |
#2 · Zasláno: 16. 10. 2009, 12:32:49
Nevím proč, ale soubor index1.php se bezobrazil celý,takže doplňuji zbytek kódu:
echo "\n<td align='center' width='35'>\n <a href='#' alt='".$row_smilies['image_code']."' onclick=\"add_code('".($row_smilies['image_code'])."');\" border=\"0\"><img src=\"./images/".$row_smilies['id'].".gif\" border=\"0\"></a>\n</td>"; $count ++; } echo "</table>"; ?> </div> <div class="main_container"> <div class="output-div-container"> <div id="output_div" onclick="show_smilies()"> </div> </div> <table border="0" width="504" class="tool_table"> <tr> <td width="20"><a href="#" onclick="show_smilies('tool')"><img src="./images/1.gif" border="0"></a></td> <td></td> </tr> </table> <div class="input-div"> <textarea name="zprava" type="text" id="text_content" onclick="show_smilies()" size="40" ></textarea> <input type="submit" value="Poslat" onclick="send_message('output_div','text_content','1')"> </div> </div> </div> </center> <?php ob_end_flush(); ?> </body> </html> |
||
Anicka Profil * |
#3 · Zasláno: 16. 10. 2009, 12:48:32
V html máš podle výše uvedených zdrojáků kódování Windows-1250. Jaké kódování máš nastavené v DB?
|
||
Kajman_ Profil * |
#4 · Zasláno: 16. 10. 2009, 13:13:31
Místo escape bych použil encodeURI a v ukládacím skriptu pak očekával data v UTF8.
|
||
Va-zo Profil * |
#5 · Zasláno: 16. 10. 2009, 13:31:38
To Anicka: No v DB mám nastaveno kódování na Czech iso-8859-2. Ale kódování DB nemůžu měnit!!! :-( Nejsem jedinej, kdo využívá tuto databázi.
To Kajman_: Takže když změním escape na encodeURI, tak budu ukládat zprávy do DB v UTF8? Jestli ano, tak to bych pak musel buď nastavit html kódování na UTF8, nebo převést UTF8 (pomocí php) na Windows-1250, že jo? |
||
peta Profil |
#6 · Zasláno: 16. 10. 2009, 13:36:46
Va-zo
Priste bych doporucoval udelat jednoduchy testovaci programek. Zkus si zapnout v php error_reporting. Obavam se, ze funkce header bude ignorovana, protoze header uz byla uzavrena predchozi funkci. Tudiz ti server vraci data v default kodovani. Pak bych si zkusil udelat primy odkaz na posilany soubor a ten zobrazit na obrazovku. At vidis, jake tam mas kodovani a jaky je jeho obsah <a href="script_page.php?user="+sender+"&set=1&t="+timestamp1+"&content=" + escape(content)">klikni na mne</a> |
||
Kajman_ Profil * |
#7 · Zasláno: 16. 10. 2009, 14:04:06
Va-zo:
Buď budete vkládat v utf8 a databázi to před insertem řeknete přes set names. Nebo si tu proměnnou převedete do cp1250 přes funkci iconv. |
||
Va-zo Profil * |
#8 · Zasláno: 16. 10. 2009, 15:34:31
No tak jsem proměnou, kam se ukládá obsah zprávy převedl:
$str_msg = iconv("UTF-8", "ISO-8859-2", $str_msg); Ale stejnak, když zapíší např. "č", tak se mi do databáze zapíše toto: %u010D :-( |
||
Chamurappi Profil |
#9 · Zasláno: 16. 10. 2009, 15:35:59
Reaguji na Va-za:
Prosím o odkaz na živou ukázku. |
||
Va-zo Profil * |
#10 · Zasláno: 16. 10. 2009, 15:41:15
|
||
Chamurappi Profil |
#11 · Zasláno: 16. 10. 2009, 15:50:36
Reaguji na Va-za:
Za procenta skutečně může funkce escape v JavaScriptu. Použij místo ní encodeURIComponent. Vstup budeš muset převést z UTF-8. Před jistou dobou jsem si vyráběl vlastní variantu encodeURIComponent, která uměla kódovat do ISO-8859-2, možná bych ji dokázal upravit. |
||
Va-zo Profil * |
#12 · Zasláno: 16. 10. 2009, 16:01:44
Změnil jsem funkci escape na encodeURIComponent a v php měním UTF-8 na ISO-8859-2, ale stále nic. :-(
|
||
Chamurappi Profil |
#13 · Zasláno: 16. 10. 2009, 16:22:59
Reaguji na Va-za:
„v php měním UTF-8 na ISO-8859-2“ Na server to nyní doputuje správně. Stačí tedy zařídit, aby i odpověď ze serveru byla zobrazená správně. V té odpovědi bys měl buď překódovat ISO-8859-2 do windows-1250, nebo nastavit „Content-Type: text/html; charset=iso-8859-2“. |
||
Va-zo Profil * |
#14 · Zasláno: 16. 10. 2009, 17:36:10
Content-Type: text/html; charset=iso-8859-2 mám takto již nastavenej, ale v databázi se pořád neukládají české znaky.
|
||
Va-zo Profil * |
#15 · Zasláno: 16. 10. 2009, 17:41:12
Tak už to funguje, akorát "š" a "ž" se zobrazují špatně (zobrazují se jako: " ą " a " ľ ")! Nevíte čím by to ještě mohlo být? Jinak všem moc děkuju za pomoc.
|
||
Chamurappi Profil |
#16 · Zasláno: 16. 10. 2009, 17:48:35 · Upravil/a: Chamurappi
Reaguji na Va-za:
„mám takto již nastavenej“ Nemáš. Odpověď ze serveru má pořád v hlavičce charset=windows-1250. Koukám, že jsi změnil <meta> značku uvnitř stránky. Tu můžeš zase vrátit zpátky. |
||
Va-zo Profil * |
#17 · Zasláno: 16. 10. 2009, 23:54:47
Mám ještě jednu prosbičku....Poraďte pls, potřebuju, aby když napíšu nějakej příspěvek, tak aby se vložil na stránce na první místo a ne na poslední.
|
||
Chamurappi Profil |
#18 · Zasláno: 17. 10. 2009, 01:04:35
Reaguji na Va-za:
Viz řádek 5 v ajax.js. Když se zamyslíš, co dělá, mohlo by tě napadnout, jak ho upravit. |
||
Va-zo Profil * |
#19 · Zasláno: 17. 10. 2009, 10:38:45
No tak to bude takhle:
document.getElementById(subject_id).innerHTML = http.responseText + document.getElementById(subject_id).innerHTML; Dík! Včera mě to už nemyslelo a taky jsem v tom hledal nějakou větší složitost, přeci jen se s Ajaxem teprve učím. |
||
Časová prodleva: 15 let
|
0