Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   Ajax кодировка (https://forum.antichat.xyz/showthread.php?t=54061)

Isis 21.11.2007 03:53

Ajax кодировка
 
Да...тема больная...
В гугле решений видел много...
Ничего не помогает..
Вообщем вместо кирилицы отображает вопросы...
ЖЭто плохо..
Скажи как избавиться от этого..
Хедеры писать пробовал, мета теги пробовал...

Scipio 21.11.2007 04:10

мож в апаче mod_charset включен?

Хозяин 21.11.2007 04:38

Выложи файл который у тебя отображается вопросами.
Скорее всего дело не в хедерах и мета тегах, а в кодировке самого созданного файла.

dev+ 21.11.2007 09:25

Тут надо смотреть -- на получении информация в какой кодировке ходит? Может она при извлечении из БД(?) уже не в той кодировке, а ты ее по ajax'у кидаешь :)

DIAgen 21.11.2007 11:01

Вот держи
PHP код:

<?php
// DIAgen (x) antichat.ru

@ob_start();
@
ob_implicit_flush(0);

error_reporting(7);

function 
win_to_utf($str$from "w") {    
    
$recode['w']=array(
    
0x0402,0x0403,0x201A,0x0453,0x201E,0x2026,0x2020,0x2021,
    
0x20AC,0x2030,0x0409,0x2039,0x040A,0x040C,0x040B,0x040F,
    
0x0452,0x2018,0x2019,0x201C,0x201D,0x2022,0x2013,0x2014,
    
0x0000,0x2122,0x0459,0x203A,0x045A,0x045C,0x045B,0x045F,
    
0x00A0,0x040E,0x045E,0x0408,0x00A4,0x0490,0x00A6,0x00A7,
    
0x0401,0x00A9,0x0404,0x00AB,0x00AC,0x00AD,0x00AE,0x0407,
    
0x00B0,0x00B1,0x0406,0x0456,0x0491,0x00B5,0x00B6,0x00B7,
    
0x0451,0x2116,0x0454,0x00BB,0x0458,0x0405,0x0455,0x0457,
    
0x0410,0x0411,0x0412,0x0413,0x0414,0x0415,0x0416,0x0417,
    
0x0418,0x0419,0x041A,0x041B,0x041C,0x041D,0x041E,0x041F,
    
0x0420,0x0421,0x0422,0x0423,0x0424,0x0425,0x0426,0x0427,
    
0x0428,0x0429,0x042A,0x042B,0x042C,0x042D,0x042E,0x042F,
    
0x0430,0x0431,0x0432,0x0433,0x0434,0x0435,0x0436,0x0437,
    
0x0438,0x0439,0x043A,0x043B,0x043C,0x043D,0x043E,0x043F,
    
0x0440,0x0441,0x0442,0x0443,0x0444,0x0445,0x0446,0x0447,
    
0x0448,0x0449,0x044A,0x044B,0x044C,0x044D,0x044E,0x044F
    
);
    
    
$recode['k']=array(
    
0x2500,0x2502,0x250c,0x2510,0x2514,0x2518,0x251c,0x2524,
    
0x252c,0x2534,0x253c,0x2580,0x2584,0x2588,0x258c,0x2590,
    
0x2591,0x2592,0x2593,0x2320,0x25a0,0x2219,0x221a,0x2248,
    
0x2264,0x2265,0x00a0,0x2321,0x00b0,0x00b2,0x00b7,0x00f7,
    
0x2550,0x2551,0x2552,0x0451,0x2553,0x2554,0x2555,0x2556,
    
0x2557,0x2558,0x2559,0x255a,0x255b,0x255c,0x255d,0x255e,
    
0x255f,0x2560,0x2561,0x0401,0x2562,0x2563,0x2564,0x2565,
    
0x2566,0x2567,0x2568,0x2569,0x256a,0x256b,0x256c,0x00a9,
    
0x044e,0x0430,0x0431,0x0446,0x0434,0x0435,0x0444,0x0433,
    
0x0445,0x0438,0x0439,0x043a,0x043b,0x043c,0x043d,0x043e,
    
0x043f,0x044f,0x0440,0x0441,0x0442,0x0443,0x0436,0x0432,
    
0x044c,0x044b,0x0437,0x0448,0x044d,0x0449,0x0447,0x044a,
    
0x042e,0x0410,0x0411,0x0426,0x0414,0x0415,0x0424,0x0413,
    
0x0425,0x0418,0x0419,0x041a,0x041b,0x041c,0x041d,0x041e,
    
0x041f,0x042f,0x0420,0x0421,0x0422,0x0423,0x0416,0x0412,
    
0x042c,0x042b,0x0417,0x0428,0x042d,0x0429,0x0427,0x042a
    
);
    
    for (
$i=0;$i<strlen($str);$i++) {
        
$letter ord($str[$i]);
        if (
$letter>=0x80) {
           
$letter -= 128;
           
$c2 "10111111" "10".substr(decbin($recode[$from][$letter]), -6);
           
$c1 "11011111" "110".str_repeat("0"5-strlen(substr(decbin($recode[$from][$letter]), 0, -6))).substr(decbin($recode[$from][$letter]), 0, -6);
           
$res .= chr(bindec($c1));
           
$res .= chr(bindec($c2));
        } else {
           
$res .= $str[$i];
        }
    }
    return 
$res;
}
?>

И так у нас тут идет кириллица....
и все такое...)
Или какой нибудь код который выполняется и выводится кириллицей...
<?php
        $Contents 
ob_get_contents () ;
        
ob_end_clean () ;
        echo 
win_to_utf($Contents);
?>

Ну думаю что тут и так все понятно...

AkyHa_MaTaTa 21.11.2007 12:13

2 DIAgen
Может я в чем то и ошибаюсь, но для перевода из одной кириллической кодировки в другую в пхп есть встроенная функция :convert_cyr_string, зачем придумывать вилосипед?

Student :) 21.11.2007 12:26

а может так
function utf ($input){
$input=iconv("CP1251", "UTF-8", $input);
return $input;
}
пример utf('привет');

DIAgen 21.11.2007 12:35

Цитата:

Сообщение от AkyHa_MaTaTa
2 DIAgen
Может я в чем то и ошибаюсь, но для перевода из одной кириллической кодировки в другую в пхп есть встроенная функция :convert_cyr_string, зачем придумывать вилосипед?

Эта функция конвертирует только кириллицу
string convert_cyr_string ( string str, string from, string to )


Эта функция преобразует строку str из одной кириллической кодировки в другую.

Цитата:

Поддерживаются следующие кодировки:
k - koi8-r
w - windows-1251
i - iso8859-5
a - x-cp866
d - x-cp866
m - x-mac-cyrillic
А на сколько я знаю.. ajax понимает только UTF-8, может и ошибаюс...)

Цитата:

Сообщение от Student :)
а может так
function utf ($input){
$input=iconv("CP1251", "UTF-8", $input);
return $input;
}
пример utf('привет');

Можно и так... вот только на не которых серваках выскаивает ошибка о том что модуль для работы iconv не подключен... хз почему...

AkyHa_MaTaTa 21.11.2007 12:38

дак...
Цитата:

Сообщение от Isis
Вообщем вместо кирилицы отображает вопросы...

Ну да ладно ты все равна молоток, не поленился зделать велосипед.

inv 21.11.2007 12:38

>может и ошибаюс...)
скорее всего да.

если тс не может менять в заголовках чарсет,пусть переведет страницы на ту кодировку в которой броузер пытается открыть

еще вроде есть
overmimetype
хз работает или нет

Хозяин 21.11.2007 13:38

А автор сам и пропал ... )

ICONV - работает не на всех серваках, т.к. идет экстеншненом к пхп. Но свою роль выполняет хорошо.

В принципе Диаген предложил хорошее решение, но оно для потока )
А так, просто создать файл текстовый, открыть редактором нормальным (нотепэд++ к примеру), сразу пустой файл перевести на utf-8 (file --> Encode --> utf-8), скопировать скрипт туда и сохранить.
ВОт так вот топором! )

Isis 21.11.2007 14:12

DIAgen, нифига не работает :)

Isis 21.11.2007 14:23

Вот скрипты мои:

info.php

PHP код:

<?php
    
include("config.php");
     include(
"header.php");
?>
<script language="javascript" type="text/javascript">
var xmlhttp = createXmlHttpRequestObject();

    function createXmlHttpRequestObject(){
        var xmlhttp;
        try{
            xmlhttp=new XMLHttpRequest();
        }
        catch(e){
        try{
                xmlhttp=new ActiveXObject("MSXML2.XMLHTTP");
        }
        catch(e){
                try{
                        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
                }
                catch(e){}
        }
        }
        if(!xmlhttp){
        alert("Не удалось создать объект XMLHttpRequest");
        }
    return xmlhttp;
    }

    function createRequestProcess(pdata)
    {
        xmlhttp=createXmlHttpRequestObject();
        if (xmlhttp)
        {
            try
            {

           xmlhttp.open("GET", "infoajax.php?" + pdata, true);
                xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded;");
        xmlhttp.setRequestHeader("Content-length", pdata.length);
                xmlhttp.send(pdata);
                xmlhttp.onreadystatechange = handleRequestStateChange;
            }
            catch (e) {alert('error : '+e.toString());}
        }
    }

    function handleRequestStateChange()
    {
        if (xmlhttp.readyState == 4)
        {
            if (xmlhttp.status == 200)
            {
                try {  ReadResponce(); }
                catch (e) {}
            } else {
                if (xmlhttp.status == 404){
                        alert("Request URL does not exist");
                } else {
                        alert("Error: status code is " + xmlhttp.status);
                }
        }
        }
    }

    function ReadResponce()
    {
        document.getElementById("content").innerHTML = xmlhttp.responseText;
    }


    function command(page)
    {
        fdata = "page="+page;
        createRequestProcess(fdata);
    }
</script>
<?php

    $do 
= isset($_GET['do'])        ?    $_GET['do']                    :    '';
    
$uin = isset($_GET['uin'])        ?    intval($_GET['uin'])        :    '';
    
$page = isset($_GET['page'])    ?    intval($_GET['page'])        :    '';

     if(
$do == 'logs' && $uin)
     {
         
$query "SELECT * FROM `logs` WHERE `uin`='".$uin."' ORDER BY `date` DESC, `time` ASC LIMIT 0,30";
        
$result mysql_query($query);
        echo 
'<table width="700" align="center">';
        for(
$i 0$i mysql_num_rows($result); $i++)
        {
             
$row mysql_fetch_array($result);
             
$date date("d.m.Y"$row['date']);
            
$hour date("H:i:s"$row['time']);
            echo 
"<tr><td align='left' width='20%'>".$date." | ".$hour."</td>
                <td>"
.wordwrap(htmlspecialchars($row['msg']), 75"<br />\n" ,1)."</td></tr>";
        }

        echo 
"</table>";
    }

     if(!
$uin)
     {
        
$query     mysql_query("SELECT COUNT(*) as `logs` FROM `logs`");
        
$row     mysql_fetch_array($query);
        
$logs     $row['logs'];

        
$num     50;
        
$total     intval(($logs 1) / $num) + 1;
        if(!
$page || $page 0$page 1;
        if(
$page $total$page $total;
        
$start $page $num $num;

        
$query "SELECT * FROM `logs` ORDER BY `date` DESC, `time` ASC LIMIT ".$start.", ".$num;
        
$result mysql_query($query);

        echo 
'<div id="content">';
        echo 
'<table width="700" align="center">';

        for(
$i 0$i mysql_num_rows($result); $i++)
        {
             
$row mysql_fetch_array($result);
             
$date date("d.m.Y"$row['date']);
            
$hour date("H:i:s"$row['time']);
            echo 
"<tr><td align='left' width='10%'>".$row['uin']."</td>
                <td align='left' width='20%'>"
.$date." | ".$hour."</td>
                <td width='400'>"
.wordwrap(htmlspecialchars($row['msg']), 65"<br />\n" ,1)."</td>
                </tr>"
;
        }

        echo 
"</table>";

        if(
$page != 1)            $pervpage     "<a href='#' onclick='command(1)'><< </a>";
        if(
$page != $total)     $nextpage     "<a href='#' onclick='command(".$total.")'> >></a>";
        if(
$page 0)         $pageleft     " [<a href='#' onclick='command(".($page 1).")'>".($page 1)."</a>] ";
        if(
$page <= $total)    $pageright    " [<a href='#' onclick='command(".($page 1).")'>".($page 1)."</a>] ";

        echo 
$pervpage.$pageleft."<b>[".$page."]</b>".$pageright.$nextpage;

        echo 
"</div>";
    }


    eval(
base64_decode("aW5jbHVkZSgnZm9vdGVyLnBocCcpOw=="));
?>

infoajax.php

PHP код:

<?php
    
include("config.php");

    
$page = isset($_GET['page'])    ?    intval($_GET['page'])        :    '';

    
$query     mysql_query("SELECT COUNT(*) as `logs` FROM `logs`");
    
$row     mysql_fetch_array($query);
    
$logs     $row['logs'];

    
$num     50;
    
$total     intval(($logs 1) / $num) + 1;
    if(!
$page || $page 0$page 1;
    if(
$page $total$page $total;
    
$start $page $num $num;

    
$query "SELECT * FROM `logs` ORDER BY `date` DESC, `time` ASC LIMIT ".$start.", ".$num;
    
$result mysql_query($query);
    echo 
'<table width="700" align="center">';

    for(
$i 0$i mysql_num_rows($result); $i++)
    {
         
$row mysql_fetch_array($result);
         
$date date("d.m.Y"$row['date']);
        
$hour date("H:i:s"$row['time']);
        echo 
"<tr><td align='left' width='10%'>".$row['uin']."</td>
            <td align='left' width='20%'>"
.$date." | ".$hour."</td>
            <td width='400'>"
.wordwrap(htmlspecialchars($row['msg']), 65"<br />\n" ,1)."</td>
            </tr>"
;
    }

    echo 
"</table>";

    if(
$page != 1)            $pervpage     "<a href='#' onclick='command(1)'><< </a>";
    if(
$page != $total)     $nextpage     "<a href='#' onclick='command(".$total.")'> >></a>";
    if(
$page 0)         $pageleft     " [<a href='#' onclick='command(".($page 1).")'>".($page 1)."</a>] ";
    if(
$page <= $total)    $pageright    " [<a href='#' onclick='command(".($page 1).")'>".($page 1)."</a>] ";

    echo 
$pervpage.$pageleft."<b>[".$page."]</b>".$pageright.$nextpage;
?>


Вообщем на первой странице все нормально выводиться т.к. там не через аякс идет, а сразу из базы...
ПОтом уже идут вопросики))

Кстати сразу вопрос...
Можно ли сделать из этих двух файлов - 1 файл...
А то вчера ток аяксом занялся и если к каждому файлу делать еще, то это бред :(

inv 21.11.2007 14:40

Код:

xmlhttp.open("GET", "infoajax.php?" + pdata, true);
                xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded;");
        xmlhttp.setRequestHeader("Content-length", pdata.length);
                xmlhttp.send(pdata);

гет\пост? у тебя все вместе=)
.................................................. .....................
меняй кодировку файлов в блокноте
или посылай нужные заголовки сервером ,больше повторять не буду=\

Isis 21.11.2007 14:43

Написано же Get...должен быть и гет...

DIAgen 21.11.2007 15:50

Вложений: 1
Все работает великолепно... смотри снизу)))

Отпишись работает или нет...

Isis 21.11.2007 16:00

DIAgen, спасибо
Все ок =)


Время: 11:47