Autor | Zpráva | ||
---|---|---|---|
leorond Profil |
Dobrý den mám veliký problém s mím webem který je spuštění na dedikovaném server přes program XAMPP 1.7.1 a to následující.
Chyba je v diakritice i přes to že mám UTF-8 se mi místo písmen ěýáíéůú zobrazují otazníky ale ščřž mi funguje bez problémů koukněte do chatu zde můj web a pochopíte o čem mluvím. Mám zde pár php souborů v kterých je podle mého názoru chyba je to: textdecode.php <? function UTF8RawUrlDecode($t) { return preg_replace( '#%u([0-9A-F]{4})#se','iconv("UTF-16BE","UTF-8",pack("H4","$1"))', $t ); } ?> potom tu mám textreplace.php a text.php dále mám ve všech php uvedeno tak jak má být mezy <head> a </head> toto : <head><meta http-equiv="Content-Type" content="text/html; charset=utf8"></head> Děkuji za pomoc s tímto problémem. |
||
SeparateSK Profil |
#2 · Zasláno: 30. 11. 2012, 19:50:22
Mal som podobný problém, vyriešil som to tak, že som príspevky najprv enkódoval do base64 a potom uložil takto enkódované do súboru/db. A pri zobrazení som tie príspevky naspäť dekódoval (base64_decode(...)) a hneď som mal aj podporu azbuky, čínštiny atď :).
|
||
whoami Profil |
#3 · Zasláno: 30. 11. 2012, 20:39:30
Ty soubory mají jaké kódování..? Notepad++ -> Encoding a u vybraného je puntík..?
|
||
leorond Profil |
#4 · Zasláno: 30. 11. 2012, 22:09:56 · Upravil/a: leorond
SeparateSK docela mne zaujalo tvoje řešení tohoto problému mohl bys mi trošku přiblížit jak toho dosáhnout jsem naprostý začátečník nebo alespon kde to najdu a co s tím.
whoami mám klasický Notepad a stránky si dělám v Adobe dream wiever 5 nedalo by se to zjistit tam? Jinak děkuji moc za tyto reakce whoami: ANSI je tam u toho puntík |
||
SeparateSK Profil |
Tu je príklad takého chatu :)
PHP(chat-global.php): <?php session_start(); date_default_timezone_set('Europe/Bratislava'); if($_SESSION[s]){ if($_GET["action"]=="send"){ if($_GET["userId"]==$_SESSION["id"]){ $text=str_replace(array("/r/n","/n/r","/n","/r"),"<br>",htmlspecialchars($_GET["text"])); if(strlen(trim($text))>0){ $f=fopen("chat/globalchat.txt","a"); fputs($f,base64_encode("<span><b><i>{$_SESSION["meno"]}</i></b></span> <span style='color:#c0c0c0'>".date("d.m.Y H:i:s")."</span><hr /><i> $text</i><br>")."\n"); fclose($f); } } } elseif($_GET["action"]=="show"){ if(file_exists("chat/globalchat.txt")){ $f=fopen("chat/globalchat.txt","r"); $fs=filesize("chat/globalchat.txt"); if($fs==0)$fs=1; $text=""; while(!feof($f)) $text.=base64_decode(fgets($f)); fclose($f); echo stripslashes($text); } } elseif($_GET["action"]=="getsize") echo filesize("chat/globalchat.txt"); } ?> $_SESSION[meno] - nick uživatela $_SESSION[id] - id uživatela chat.php: <?php session_start(); ?> <?php if($_SESSION[s]){ ?> <script> var prevSize=0; var firstload=false; function _connect(address,params,callback){ var x; (XMLHttpRequest)?x=new XMLHttpRequest():x=new ActiveXObject("Microsoft.XMLHTTP"); x.onreadystatechange=function(){ if(x.readyState==4&&x.status==200){ callback(); } } x.open("GET",address+"?"+params,true); x.send(); } function LoadChat(containerId){ var x; (XMLHttpRequest)?x=new XMLHttpRequest():x=new ActiveXObject("Microsoft.XMLHTTP"); x.onreadystatechange=function(){ if(x.readyState==4&&x.status==200){ document.getElementById(containerId).innerHTML=x.responseText+"<a name='last-msg'></a>"; location.hash="reset"; location.hash="last-msg"; } } x.open("GET","chat-global.php?action=show",true); x.send(); } function SendMessage(text){ var userName="default"; var userId=<?php echo $_SESSION[id]; ?>; _connect("chat-global.php","action=send&userName="+userName+"&userId="+userId+"&text="+text,function(){LoadChat("chat-container");}); location.hash="reset"; location.hash="last-msg"; } function BlockKeys(){ var e=event; var key=(e.keyCode)?e.keyCode:e.charCode; if(key==13){ var obj=document.getElementById("chat-text"); SendMessage(obj.value); obj.value=""; } } function CheckForLoad(){ var x; var sizeNow=0; (XMLHttpRequest)?x=new XMLHttpRequest():x=new ActiveXObject("Microsoft.XMLHTTP"); x.onreadystatechange=function(){ if(x.readyState==4&&x.status==200){ sizeNow=parseInt(x.responseText); if(sizeNow!=prevSize) if(firstload==true) LoadChat("chat-container"); else { firstload=true; } prevSize=sizeNow; } } x.open("GET","chat-global.php?action=getsize",true); x.send(); } setInterval(function(){CheckForLoad();},1000); </script> <div style="margin:0 auto;width:98%;height:600px;overflow:auto;padding:5px;background-color:rgba(255,255,255,1);border:1 solid black" id="chat-container"><span style="font-size:23px">Chat sa nacitava...</span></div> <div style="padding:2px;padding-left:4px"> <textarea name="chat-text" id="chat-text" onkeydown="" onkeyup="BlockKeys()" placeholder="Zadajte text" style="width:99%;height:100px"></textarea> </div> <script>LoadChat("chat-container"); _connect("chat-global.php","action=getsize",function(){firstload=true;});</script> <?php } else { echo "<span style='font-size:23px'>Prosim, prihlaste sa</span><br>"; } ?> Samozrejme vytvor zložku chat a do nej súbor globalchat.txt Inak keď to ukladáš do txt súboru, tak to base64 až tak nepotrebuješ, ale keď to ukladáš do DB(napr MySQL), tak sa to base64 hodí a nemusíš sa trápiť s kódovaním, lebo base 64 je vždy ANSI a s ANSI by DB asi nemala mať problém :) |
||
leorond Profil |
Při zpracování BB značek došlo k samovolnému sežrání celého příspěvku. Pardon.
Ale tak to je opravdu dost složité :D ale abych pravdu řekl o chat mi ani tak nejde ale spíš o přidávání novinek které se mi ukazují jako otazníky. Mohl bych sem třeba hodit script že by jste koukli zda jsem neudělal někde chybu? [edit (1.12.2012 17:15:09)][hr] [/edit] [b][i]addnews.php[/i][/b] [pre] <?php include ("gmaccess.php"); include ("functions/textreplace.php"); include ("functions/text.php"); if ($cat[1] != NULL) $cat[1] = ";".$cat[1]; if (isset($_POST['add_news'])) { $result = mssql_query("select top 1 id from ew_news order by id desc"); $myrow = mssql_fetch_array($result); if (mssql_num_rows($result) == 0) $idn = 1; else $idn = $myrow[0]; $languages = explode(",",$enemy['languages']); $k = 0; $ii = 0; do { $title = trim(stripslashes($_POST['title'.$languages[$k].''])); $text = trim(stripslashes($_POST['text'.$languages[$k].''])); if (empty($title) or empty($text)) { echo "<p><ul><li>".eror_complete_data."</li></ul></p>"; } elseif (strlen($text) > $Limit['news_post']) { echo "<ul><li>".try_to_enter_more_char."</li></ul>"; } else { $ii++; $text = replace_text('add',$text); $query = mssql_query("insert into EW_NEWS (title,lang,date,idn,text,posted_by) values ('$title','".$languages[$k]."','$date',$idn+1,'$text','$nickname')"); } $k++; } while ($k < count($languages)); if ($ii == count($languages)) echo "<ul><li>".news_added."</li></ul>"; } elseif (isset($_POST['delete_news'])) { $id = trim($_POST['id']); if (!preg_match('/^[0-9]/i', $id)) { echo "<ul><li>".something_wrong."</li></ul>"; } else { $result = mssql_query("select id from ew_news where idn='$id'"); if (mssql_num_rows($result) > 0) { $query = mssql_query("delete from EW_NEWS where idn = $id"); echo "<ul><li>".news_deleted."</li></ul>"; } else { echo "<ul><li>".news_not_found."</li></ul>"; } } } elseif (isset($_POST['edit_newss'])) { $title = trim(stripslashes($_POST['title'])); $text = trim(stripslashes($_POST['text'])); $id_news = trim($_POST['id_news']); if (empty($title) or empty($text) or !preg_match('/^[0-9]/i', $id_news)) { echo "<ul><li>".eror_complete_data."</li></ul>"; } elseif (strlen($text) > $Limit['news_post']) { echo "<ul><li>".try_to_enter_more_char."</li></ul>"; } else { $result = mssql_query("select id from ew_news where id='$id_news'"); if (mssql_num_rows($result) > 0) { $text = replace_text('add',$text); $query = mssql_query("update EW_NEWS set title = '$title', text = '$text' where id=$id_news"); echo "<p><ul><li>".news_edited."</li></ul></p>"; } else { echo "<ul><li>".news_not_found."</li></ul>"; } } } echo "<script type=\"text/javascript\">document.getElementById(\"h4\").innerHTML = \"".admin_news."\"</script> <input type='hidden' id='module_contet' value='".admin_news."'>"; echo "<table width='100%' align=center border='0' cellpadding='0' cellspacing='2'> <tr class='top_table'> <td><b>№</b></td> <td><b>".title."</b></td> <td><b>".posted_by."</b></td> <td><b>".posted_date."</b></td> <td colspan='2'><b>".table_options."</b></td> </tr> "; $num = $Option['news_pg']; @$page = $_GET['page']; $result00 = mssql_query("SELECT COUNT(*) FROM EW_NEWS"); $temp = mssql_fetch_array($result00); $posts = $temp[0]; if ($posts == 0) $posts = 1; $total = (($posts - 1) / $num) + 1; $total = intval($total); $page = intval($page); if (empty($page) or $page < 0) $page = 1; if ($page > $total) $page = $total; $start = $num * ($page - 1); $result = mssql_query("SELECT TOP $num * FROM EW_NEWS where id NOT IN (SELECT TOP $start id FROM EW_NEWS ORDER BY id desc) ORDER BY id desc"); if (mssql_num_rows($result) > 0) { $myrow = mssql_fetch_array($result); $kk = 0; do { $kk++; $myrow["title"] = UTF8RawUrlDecode(htmlspecialchars($myrow["title"])); printf ("<tr class='contet_table' align='center'> <td><b>%s</b></td> <td><a>%s</a></td> <td>%s</td> <td>%s</td> <td width='5'> <form onsubmit=\"request('form_edit%s','sh_','POST','getpage.php?cat=Add-News".$cat[1]."'); return false;\" id='form_edit%s'> <input name='id' type='hidden' value='%s'> <input name='edit_news' type='submit' value='".Upravit."'> </form> </td> <td width='5'> <form onsubmit=\"request('form_delete%s','sh_','POST','getpage.php?cat=Add-News".$cat[1]."'); return false;\" id='form_delete%s'> <input name='id' type='hidden' value='%s'> <input name='delete_news' type='submit' value='".Smazat."'> </form> </td> ", $kk, $myrow['title'], $myrow['posted_by'], $myrow['date'], $myrow['id'], $myrow['id'], $myrow['id'], $myrow['id'], $myrow['id'], $myrow['idn']); } while ($myrow = mssql_fetch_array($result)); } echo "</table><br>"; if ($page != 1) $pervpage = '<a href=?emw;Add-News;1 rel="history2">'.first.'</a> | <a href=?emw;Add-News;'. ($page - 1) .' rel="history2">'.previous.'</a> | '; if ($page != $total) $nextpage = ' | <a href=?emw;Add-News;'.($page + 1).' rel="history2">'.next.'</a> | <a href=?emw;Add-News;'.$total.' rel="history2">'.last.'</a>'; if ($page - 5 > 0) $page5left = '<a href=?emw;Add-News;'.($page - 5).' rel="history2">'.($page - 5).'</a> | '; if ($page - 4 > 0) $page4left = '<a href=?emw;Add-News;'.($page - 4).' rel="history2">'.($page - 4).'</a> | '; if ($page - 3 > 0) $page3left = '<a href=?emw;Add-News;'.($page - 3).' rel="history2">'.($page - 3).'</a> | '; if ($page - 2 > 0) $page2left = '<a href=?emw;Add-News;'.($page - 2).' rel="history2">'.($page - 2).'</a> | '; if ($page - 1 > 0) $page1left = '<a href=?emw;Add-News;'.($page - 1).' rel="history2">'.($page - 1).'</a> | '; if ($page + 5 <= $total) $page5right = ' | <a href=?emw;Add-News;'.($page + 5).' rel="history2">'.($page + 5).'</a>'; if ($page + 4 <= $total) $page4right = ' | <a href=?emw;Add-News;'.($page + 4).' rel="history2">'.($page + 4).'</a>'; if ($page + 3 <= $total) $page3right = ' | <a href=?emw;Add-News;'.($page + 3).' rel="history2">'.($page + 3).'</a>'; if ($page + 2 <= $total) $page2right = ' | <a href=?emw;Add-News;'.($page + 2).' rel="history2">'.($page + 2).'</a>'; if ($page + 1 <= $total) $page1right = ' | <a href=?emw;Add-News;'.($page + 1).' rel="history2">'.($page + 1).'</a>'; if ($total > 1) { Error_Reporting(E_ALL & ~E_NOTICE); echo "<center><div class=\"pstrnav\">"; echo $pervpage.$page5left.$page4left.$page3left.$page2left.$page1left.'<b>'.$page.'</b>'.$page1right.$page2right.$page3right.$page4right.$page5right.$nextpage; echo "</div></center>"; } if (isset($_POST['edit_news'])) { $id = trim($_POST['id']); if (!preg_match('/^[0-9]/i', $id)) { echo "<ul><li>".something_wrong."</li></ul>"; } else { $result = mssql_query("select * from EW_NEWS where id=$id"); $myrow = mssql_fetch_array($result); ?> <br> <form onsubmit="request('form_com','sh_','POST','getpage.php?cat=Add-News<? echo $cat[1];?>'); return false;" id="form_com"> Předmět:<input value="<? echo htmlspecialchars(UTF8RawUrlDecode($myrow['title']));?>" name="title" type="text" size="30" maxlength="100"> <?php $myrow['text'] = preg_replace("'<br>'", "\n", $myrow['text']); ?> <? echo news_textarea("form_com","text",htmlspecialchars(UTF8RawUrlDecode($myrow['text'])),$Limit['news_post'],"");?> <input name="id_news" type="hidden" value="<? echo $myrow['id']; ?>" > <input type="submit" name="edit_newss" id="submit" value="Úprava" > </form> <? } } else { ?> <br> <form onsubmit="request('form_com','sh_','POST','getpage.php?cat=Add-News<? echo $cat[1];?>'); return false;" id="form_com"> <? $languages = explode(",",$enemy['languages']); $k = 0; do { if ($k == 0) $background = "background:#222222;"; else $background = "background:#111111;"; $kk = 0; $onclick = ""; do { if ($kk == $k) $onclick .= "document.getElementById('news".$languages[$kk]."').style.display='';document.getElementById('language".$languages[$kk]."').style.backgroundColor='#222222';"; else $onclick .= "document.getElementById('news".$languages[$kk]."').style.display='none';document.getElementById('language".$languages[$k |
||
Alphard Profil |
#7 · Zasláno: 1. 12. 2012, 18:16:54
[#6] leorond
Dávejte sem jenom relevantní části kódu. Jak sám vidíte, máme problémy se zpracováním moc dlouhého příspěvku. Převod do base64 musí být zbytečnost, s utf-8 jde bez problémů pracovat. V databázi je už diakritika poškozená? V jakém kódování jsou uložené soubory? Zkoušel jste tu funkci v [#1] vynechat? |
||
leorond Profil |
#8 · Zasláno: 3. 12. 2012, 16:40:54 · Upravil/a: leorond
Jsou v ANSI změnil jsem tedy na UTF-8 ale stejně když přidávám příspěvek "news" na stránku tak mi nejdou čárky ale háčky to bere. Přitom když jsem přepisoval web do CZ a upravoval tak v menu atd. se háčky i čárky oběvují bez problémů.
Ano zkoušel ale je zanesená právě i v chatu a v addnews.php a news.php takže jsem ji zkusil odstranit a výsledkem je že nelže editovat news a po zapsání se oběvuje např. %15 atd. jak kdyby to nebylo v UTF-8 a odkazuje mne to na textreplace.php |
||
Časová prodleva: 11 let
|
0