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
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
Ty soubory mají jaké kódování..? Notepad++ -> Encoding a u vybraného je puntík..?
leorond
Profil
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>&nbsp;&nbsp;$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[s] ukazuje na to či je uživatel prihlásený
$_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>";
    }
?>
Tieto scripty uprav podla seba, aby na to Session pasovali :)
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
[#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
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

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: