| 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 Objectfunction.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: 16 let
|
|||
0