Реализация русских кодировок в AJAX

Тема в разделе "Как сделать...", создана пользователем RALF, 5 янв 2008.

Статус темы:
Закрыта.
  1. RALF

    RALF черный рыцарь

    Регистр.:
    1 май 2006
    Сообщения:
    114
    Симпатии:
    25
    Добрый всем день!

    Надеюсь все хорошо провели новогодние деньки!

    Тут копался с одним классом, а именно: phpMyDataGrid 2007 - AJAX Enabled Datagrid

    Класс взят с phpclasses.org

    Автор класса - Gustavo Arcila

    Страница класса -
    http://www.phpclasses.org/browse/package/2943.html

    Итак к проблеме: В работе этого класса появились существенные проблемы. Русский язык работает, но если у тебя не одна таблица данных и есть постраничный вывод, то когда ты нажимаешь на страницу номер 2 например, то вылетает страница вместо русских символов ромбики с иероглифами.

    Я давно знаю что есть большая проблема у AJAXa с русскими кодировками. Побрел по инету, читал на форумах и многие пишут что проблему с AJAX - русские кодировки можно решить с помощью http://dklab.ru/lib/JsHttpRequest/.

    Вроде всё есть под рукой и класс и библиотека для решения кодировок. Не знаю как это сделать! Есть ли у кого каки-нибудь советы ...
    Могу сделать принскрин экрана когда возникает баг.

    С чего начать? Пользовался ли кто этой библиотекой ?

    Заранее благодарен! :bc:

    P.S. скачать класс и библиотеку можно из вложений! ;)
     

    Вложения:

  2. nnmkayf

    nnmkayf

    Регистр.:
    25 июл 2007
    Сообщения:
    153
    Симпатии:
    98
    Уже не раз про это писалось, но повторюсь, алгоритм простой:

    программируешь на JS и есть русский язык => используй кодировку UTF-8

    И вообще, давно пора все сайты на эту кодировку переводить.

    UTF-8 вообще все проблемы с кодировкой снимает, в том числе с сортировкой.

    С этой либой работал, тоже где-то на форуме описывал все про нее. Вкраце, ее стоит использовать только если совсем не получается избавится от античных кодировок. Еще одна фишка в ней типа дебаг, но есть более мощные средства встраиваемые в браузер. Все остальное в либе гиморой.
    p.s. Лично я не рекомендую либой пользоваться, одни ob_start чего стоят :)
     
  3. Jeurey

    Jeurey

    Регистр.:
    13 сен 2006
    Сообщения:
    419
    Симпатии:
    576
    Траблы с кодировкой решаются 2-мя функциями, работающими с 1 массивом (типа - кривая кодировка- нормальная кодировка).
     
  4. RALF

    RALF черный рыцарь

    Регистр.:
    1 май 2006
    Сообщения:
    114
    Симпатии:
    25
    nnmkayf может быть это и решение моей проблемы! Насчет utf-8 давно думал. Знал что с помощью этой кодировки проблем вообще не будет, но просто хотелось сделать это по-иному.

    Jeurey - Ты насчет функции замены в классе говоришь, которая заменяет символы одни на другие?
     
  5. Jeurey

    Jeurey

    Регистр.:
    13 сен 2006
    Сообщения:
    419
    Симпатии:
    576
    Я встречал минимум 3 типа сбоев в работе кодировок. Один из них лечится вот этим классом (можете и избавиться от этого "недостатка").

    Перед приемом/отдачей из базы просто сделай decode/encode.

    PHP:
    <?php
    class JS_encoding
    {    
        public  
    $rus_chars;
        public  
    $rus_codes;
        
        function 
    __construct()
        {    
    $this->rus_chars = array('А','Б','В','Г','Д','Е','Ё','Ж','З','И','Й','К','Л','М','Н','О','П','Р','С','Т','У','Ф','Х','Ц','Ч','Ш','Щ','Ъ','Ы','Ь','Э','Ю','Я','а','б','в','г','д','е','ё','ж','з','и','й','к','л','м','н','о','п','р','с','т','у','ф','х','ц','ч','ш','щ','ъ','ы','ь','э','ю','я');
            
    $this->rus_codes = array('%u0410','%u0411','%u0412','%u0413','%u0414','%u0415','%u0401','%u0416','%u0417','%u0418','%u0419','%u041A','%u041B','%u041C','%u041D','%u041E','%u041F','%u0420','%u0421','%u0422','%u0423','%u0424','%u0425','%u0426','%u0427','%u0428','%u0429','%u042A','%u042B','%u042C','%u042D','%u042E','%u042F','%u0430','%u0431','%u0432','%u0433','%u0434','%u0435','%u0451','%u0436','%u0437','%u0438','%u0439','%u043A','%u043B','%u043C','%u043D','%u043E','%u043F','%u0440','%u0441','%u0442','%u0443','%u0444','%u0445','%u0446','%u0447','%u0448','%u0449','%u044A','%u044B','%u044C','%u044D','%u044E','%u044F');
        }
        function 
    encode($string)
        {    return 
    str_replace($this->rus_chars,$this->rus_codes,$string);
        }
        function 
    decode($string)
        {    return 
    str_replace($this->rus_codes,$this->rus_chars,$string);
        }
    }
    ?>

    А вообще - неплохо было бы уточнить, когда возникает баг. Просто, я так понимаю, проблемы возникают в ослике... да?
     
    RALF нравится это.
  6. RALF

    RALF черный рыцарь

    Регистр.:
    1 май 2006
    Сообщения:
    114
    Симпатии:
    25
    Класс неплохой! Попробую сделать Decode/Encode!

    Баг возникает, когда я переключаю страницы, т.е у Меня где то 1000 записей в таблице, Они разбиты постранично автоматом. Когда грузится 1-ая страница кодировка работает нормально, когда переключаю на 2 или 3 и т.д. страницу возникает баг кодировки.

    Баг был замечен в ослике и мозилле и опере!

    Использовал кодировку windows-1251!
     
  7. Jeurey

    Jeurey

    Регистр.:
    13 сен 2006
    Сообщения:
    419
    Симпатии:
    576
    Если трабла в трех браузерах - значит трабла не в браузерах... Ты уверен, что у тебя вторая страница отдается в нужной кодировке?

    Может, используется что-то типа переподключения к базе при выводе второй паги? Тогда там может быть опущен параметр вывода из базы...

    Попробуй спровоцировать вывод xml в браузер непосредственно... Минуя JS-обработчики
     
  8. medvoodoo

    medvoodoo Постоялец

    Регистр.:
    28 мар 2007
    Сообщения:
    89
    Симпатии:
    19
    Если баг есть в трех браузерах то пользуем firefox+firebug не встречал того, чего бы он не мог отловить :)
     
Статус темы:
Закрыта.