Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > Глюки с кодировкой, отсылка XMLHttpRequest


Автор: Elfet 29.12.2005, 19:18
Код

function sendComment() {
    currentChatText = encodeURIComponent( document.forms['chatForm'].elements['chatbarText'].value  );
    if (currentChatText != '' & (httpSendChat.readyState == 4 || httpSendChat.readyState == 0)) {
        param = 'mid='+ $id + '&text='+ currentChatText;
        httpSendChat.open("POST", SendChaturl, true);
        httpSendChat.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    httpSendChat.onreadystatechange = handlehHttpSendChat;
    httpSendChat.send(param);
    document.forms['chatForm'].elements['chatbarText'].value = '';
                document.forms['chatForm'].elements['chatbarText'].focus();
    } else {
        setTimeout('sendComment();',1000);
    }
}

Пот так посылаю.
Код

    function send()
    {
     $text = rawurldecode($this->ipsclass->input['text']);
     $mid  = intval($this->ipsclass->input['mid']);
     $this->ipsclass->DB->query("INSERT INTO ibf_hello_db (from_mid,to_mid,text,time) VALUES (".$this->ipsclass->member['id'].",".$mid.",'".$text."',".time().")");
     $fp = fopen ("file.txt", "w+");
     fwrite ($fp, $text);
     fclose ($fp);
    }

Вот так получаю =( НО что то не то с кодировко!!! В БД идёт абракадабра всякая, а в файле.тхт - нормальный текст!!!!

А если делаю прямой запрос то всё-всё в порядке:
Цитата
http://localhost/mellon/index.php?act=hello&CODE=send&mid=1&text=Я%20тестю%20эту%20штуку

Автор: Sardar 29.12.2005, 22:29
encodeURIComponent кодирует текст в UTF-8, на серваке ты получаешь UTF-8, вносишь в базу, а назад читаешь и отдаёшь юзеру как CP1251. Вытавь в браузере вид->кодировка->UTF-8, все станет вопросами, а каркозябры станут нормальным текстом.

Выход: конвертировать месаги в любую кодировку через iconv, или отдавать всю пагу в UTF-8

Автор: Elfet 30.12.2005, 19:17
Пробовал я уже кодировать:
$text = iconv("windows-1251", "UTF-8", rawurldecode($this->ipsclass->input['text']));

Автор: Sardar 30.12.2005, 22:18
Ага, мысль верная, только UTF-8 ты получаешь smile

$text = iconv("UTF-8", "windows-1251", $this->ipsclass->input['text']);

Автор: Elfet 31.12.2005, 00:12
smile Заработало!!! smile Спасибо!!!

Автор: Elfet 3.1.2006, 13:43
Странные глюки smile На локал хосте все работает smile А в интернете - нет( Тоже загружает в странной кодировке XMLHttpRequest. Но если я напрямую обращаюсь к скрипту загрузки - то всё впорядке :/ Можно посмотреть у меня на сайте:

(Только нужно выполнить вход: www | www)

http://mellon.ru/index.php?act=hello&mid=1

Автор: Sardar 3.1.2006, 15:59
Попробуй для начала постаивть в скрипте по CODE=load строчку:
header("Content-type: text/plain; charset=windows-1251");
Это укажет XMLHttpRequest в какой кодировке придёт текст. А вобще как уже сказал отдавай XML в UTF-8, затем пользуйся responseXML.

Автор: Elfet 3.1.2006, 16:06
Ого! Спасибо! Заработало!!! smile) Класс!! Оромно спасибо!))

Только про
Цитата
А вобще как уже сказал отдавай XML в UTF-8, затем пользуйся responseXML

Я ничего не знаю smile Так как я посмотрел как делают чаты через XMLHttpRequest посылают и отпровляют и сделал так же smile
Хорошобы узнать что-нибудь про это "шаманство" побольше smile)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)