Ajax кодировка

Discussion in 'PHP' started by banned, 21 Nov 2007.

Thread Status:
Not open for further replies.
  1. banned

    banned Banned

    Joined:
    20 Nov 2006
    Messages:
    3,324
    Likes Received:
    1,193
    Reputations:
    252
    Да...тема больная...
    В гугле решений видел много...
    Ничего не помогает..
    Вообщем вместо кирилицы отображает вопросы...
    ЖЭто плохо..
    Скажи как избавиться от этого..
    Хедеры писать пробовал, мета теги пробовал...
     
    1 person likes this.
  2. Scipio

    Scipio Well-Known Member

    Joined:
    2 Nov 2006
    Messages:
    733
    Likes Received:
    544
    Reputations:
    190
    мож в апаче mod_charset включен?
     
  3. Хозяин

    Хозяин Elder - Старейшина

    Joined:
    15 Mar 2006
    Messages:
    435
    Likes Received:
    404
    Reputations:
    110
    Выложи файл который у тебя отображается вопросами.
    Скорее всего дело не в хедерах и мета тегах, а в кодировке самого созданного файла.
     
  4. dev+

    dev+ New Member

    Joined:
    11 Nov 2007
    Messages:
    8
    Likes Received:
    3
    Reputations:
    5
    Тут надо смотреть -- на получении информация в какой кодировке ходит? Может она при извлечении из БД(?) уже не в той кодировке, а ты ее по ajax'у кидаешь :)
     
  5. DIAgen

    DIAgen Banned Life!

    Joined:
    2 May 2006
    Messages:
    1,055
    Likes Received:
    376
    Reputations:
    460
    Вот держи
    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);
    ?>
    Ну думаю что тут и так все понятно...
     
  6. AkyHa_MaTaTa

    AkyHa_MaTaTa Elder - Старейшина

    Joined:
    19 Mar 2007
    Messages:
    557
    Likes Received:
    306
    Reputations:
    27
    2 DIAgen
    Может я в чем то и ошибаюсь, но для перевода из одной кириллической кодировки в другую в пхп есть встроенная функция :convert_cyr_string, зачем придумывать вилосипед?
     
  7. Student :)

    Student :) Elder - Старейшина

    Joined:
    9 Feb 2007
    Messages:
    278
    Likes Received:
    18
    Reputations:
    -15
    а может так
    function utf ($input){
    $input=iconv("CP1251", "UTF-8", $input);
    return $input;
    }
    пример utf('привет');
     
    1 person likes this.
  8. DIAgen

    DIAgen Banned Life!

    Joined:
    2 May 2006
    Messages:
    1,055
    Likes Received:
    376
    Reputations:
    460
    Эта функция конвертирует только кириллицу
    string convert_cyr_string ( string str, string from, string to )


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

    А на сколько я знаю.. ajax понимает только UTF-8, может и ошибаюс...)

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

    AkyHa_MaTaTa Elder - Старейшина

    Joined:
    19 Mar 2007
    Messages:
    557
    Likes Received:
    306
    Reputations:
    27
    дак...
    Ну да ладно ты все равна молоток, не поленился зделать велосипед.
     
  10. inv

    inv Banned

    Joined:
    3 Aug 2007
    Messages:
    261
    Likes Received:
    143
    Reputations:
    -58
    >может и ошибаюс...)
    скорее всего да.

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

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

    Хозяин Elder - Старейшина

    Joined:
    15 Mar 2006
    Messages:
    435
    Likes Received:
    404
    Reputations:
    110
    А автор сам и пропал ... )

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

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

    banned Banned

    Joined:
    20 Nov 2006
    Messages:
    3,324
    Likes Received:
    1,193
    Reputations:
    252
    DIAgen, нифига не работает :)
     
  13. banned

    banned Banned

    Joined:
    20 Nov 2006
    Messages:
    3,324
    Likes Received:
    1,193
    Reputations:
    252
    Вот скрипты мои:

    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 файл...
    А то вчера ток аяксом занялся и если к каждому файлу делать еще, то это бред :(
     
  14. inv

    inv Banned

    Joined:
    3 Aug 2007
    Messages:
    261
    Likes Received:
    143
    Reputations:
    -58
    Code:
    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);
    
    гет\пост? у тебя все вместе=)
    .......................................................................
    меняй кодировку файлов в блокноте
    или посылай нужные заголовки сервером ,больше повторять не буду=\
     
  15. banned

    banned Banned

    Joined:
    20 Nov 2006
    Messages:
    3,324
    Likes Received:
    1,193
    Reputations:
    252
    Написано же Get...должен быть и гет...
     
  16. DIAgen

    DIAgen Banned Life!

    Joined:
    2 May 2006
    Messages:
    1,055
    Likes Received:
    376
    Reputations:
    460
    Все работает великолепно... смотри снизу)))

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

    Attached Files:

    • isis.zip
      File size:
      15.9 KB
      Views:
      160
    #16 DIAgen, 21 Nov 2007
    Last edited: 21 Nov 2007
    1 person likes this.
  17. banned

    banned Banned

    Joined:
    20 Nov 2006
    Messages:
    3,324
    Likes Received:
    1,193
    Reputations:
    252
    DIAgen, спасибо
    Все ок =)
     
Thread Status:
Not open for further replies.