Модераторы: korob2001, ginnie

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> помогите разобраться с кодировкой AJAX и PERL, не могу разобратся как перекодировать 
:(
    Опции темы
evya
Дата 19.4.2009, 10:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 257
Регистрация: 7.3.2009

Репутация: нет
Всего: нет



Уважаемые господа програмисты!

Помогите разобратся, опыта в передачах через AJAX мало., знаю что он работает только с UTF-8, на самому не получается разобратся
итак есть форма, необходимо ее вывести в реальном времени на страницу при заполнении.

В итоге выводятся символы в неизвестной кодировке

Думаю проблема, что форма отправляется с СР а аякс принимает только в UTF, и так же с перлом при выводе.

пожалуйста поправьте код. smile 

HTML:

Код

<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">

<html>
<head>
<title>Simple Ajax Example</title>
<script language="Javascript">
function xmlhttpPost(strURL) {
    var xmlHttpReq = false;
    var self = this;
    // Mozilla/Safari
    
       if (window.XMLHttpRequest) {
        self.xmlHttpReq = new XMLHttpRequest();
    }
    // IE
    else if (window.ActiveXObject) {
        self.xmlHttpReq = new ActiveXObject("Microsoft.XMLHTTP");
    }
    self.xmlHttpReq.open('POST', strURL, true);
    self.xmlHttpReq.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    self.xmlHttpReq.onreadystatechange = function() {
        if (self.xmlHttpReq.readyState == 4) {
            updatepage(self.xmlHttpReq.responseText);
        }
    }
    self.xmlHttpReq.send(getquerystring());
}

function getquerystring() {
    var form     = document.forms['f1'];
    var word = form.word.value;
    qstr = 'w=' + escape(word);  // NOTE: no '?' before querystring
    return qstr;
}

function updatepage(str){
    document.getElementById("result").innerHTML = str;
}
</script>
</head>
<body>
<form name="f1">
  <p>Проверка: 
    <input name="word" type="text">  
  <input value="Go" type="button" onclick='JavaScript:xmlhttpPost("/cgi-bin/ajax.pl")'></p>
  <div id="result"></div>
</form>
</body>
</html>


Скрипт:

Код

#!/usr/bin/perl -w
use CGI;

$query = new CGI;

$secretword = $query->param('w');
$remotehost = $query->remote_host();

print $query->header;

print "<p>Вы ввели: <b>$secretword</b> and your IP is <b>$remotehost</b>.</p>";



на сайте http://1m65.ru/ajax.html


Это сообщение отредактировал(а) evya - 19.4.2009, 10:39
PM MAIL   Вверх
GoDleSS
Дата 19.4.2009, 20:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 105
Регистрация: 11.2.2007
Где: Пироговский

Репутация: 2
Всего: 2



Даже без проверки:
Цитата

<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">

должен идти в контейнере <head></head>

Также проверьте правильную выдачу кодировки сервером
--------------------
It's a nice day to die my friend!
PM MAIL WWW ICQ   Вверх
evya
Дата 20.4.2009, 05:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 257
Регистрация: 7.3.2009

Репутация: нет
Всего: нет



Даже если писать его в контейнере head, все равно кодировка неправильна
PM MAIL   Вверх
KSURi
Дата 20.4.2009, 10:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 887
Регистрация: 8.6.2006
Где: Russia

Репутация: 20
Всего: 27



Цитата

Код

print $query->header;


попробуйте заменить на
Код

print $query->header(-charset => 'UTF-8');



--------------------
Died at Life.pl line 21
PM Jabber   Вверх
pompei
Дата 20.4.2009, 11:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 155
Регистрация: 7.9.2007

Репутация: 2
Всего: 6



Код

print yourEncoding_convertsTo_utf8( "<p>Вы ввели: <b>$secretword</b> and your IP is <b>$remotehost</b>.</p>" );

sub yourEncoding_convertsTo_utf8 {
   my $myEncodingStr = shift;
   return ... здесь нужно преобразовать вашу кодировку в утф8
}


а можно по другому: просто сам файл преобразовать в утф8.

Выбирайте что удобнее
--------------------
А всё оказывается гораздо проще: пассивные наноструктуры - активные наноструктуры - системы наносистем - молекулярные наносистемы - сингулярность! По пять лет на каждый этап.
PM MAIL   Вверх
evya
Дата 20.4.2009, 13:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 257
Регистрация: 7.3.2009

Репутация: нет
Всего: нет



Это понятно,

так я отправляю в кодировке cp, 
 -как мне преобразовать в Java из ср в утф, 

и обратно при получении ответа из perla, из UTF в СР

в какой часте Java это делать нужно

помогите примером

PM MAIL   Вверх
pompei
Дата 21.4.2009, 09:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 155
Регистрация: 7.9.2007

Репутация: 2
Всего: 6



Если ваш файл в cp1251 кодировке, то надо так
Код

use Convert::Cyrillic;

sub yourEncoding_convertsTo_utf8 {
   my $myEncodingStr = shift;
   return Convert::Cyrillic::cstocs ("WIN", "UTF-8", $myEncodingStr); 
}


нужно ещё установить модуль Convert::Cyrillic, например с CPAN-а: http://search.cpan.org/~jneystadt/cyrillic...ert/Cyrillic.pm

как устанавливать модули перла в винде смотрите в гугле (там есть пошаговые инструкции)
--------------------
А всё оказывается гораздо проще: пассивные наноструктуры - активные наноструктуры - системы наносистем - молекулярные наносистемы - сингулярность! По пять лет на каждый этап.
PM MAIL   Вверх
shamber
Дата 21.4.2009, 09:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1422
Регистрация: 5.9.2006
Где: Россия

Репутация: 17
Всего: 18



на этом сайте тоже есть инструкции по установке
PM MAIL Jabber   Вверх
kavkaz
Дата 21.4.2009, 13:40 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 70
Регистрация: 26.12.2007

Репутация: 1
Всего: 2



Господа, а разве ответ ajax'у обязательно должен приходить в utf8 ?
я понимаю что это может быть настоятельная рекомендация, но не панацея же.
Наверняка у многих есть проекты в cp1251 и там же используется cp1251 

Уважаемый evya, у вас скрипт, к которому обращается javascript (http://1m65.ru/cgi-bin/ajax.pl) сам по себе вроде как отдается без чарсета
вам тут уже неоднократно советовали выставить хидер.

Отладьте сначала отдельно ваш скрипт /cgi-bin/ajax.pl, чтоб он отдавал все в нужной вам кодировке
Затем пробуйте посылать к нему запросы через ajax
Для облегчения жизни при работе с javascript'ом, в частности с ajax'ом советую использовать какие нибудь фреймверки (например jquery)  

Проверьте в какой кодировке приходят данные к /cgi-bin/ajax.pl
Убедитесь что /cgi-bin/ajax.pl отдает ответ в нужной кодировке

не бойтесь если приперло пользоваться use Encode
есть так же полезная функция utf8::is_utf

сугубо личный совет: если нет острой необходимости, лучше использовать cp1251, а не utf8 в качестве основной кодировки проекта. (это личное мнение основанное на походе по граблям)

в целом, работать с ajax и c cp1251 вполне себе можно



Это сообщение отредактировал(а) kavkaz - 21.4.2009, 13:45
PM MAIL ICQ Skype   Вверх
evya
Дата 21.4.2009, 19:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 257
Регистрация: 7.3.2009

Репутация: нет
Всего: нет



Про заголовки все понятно в скрипте!
Согласен с kavkaz что сайт лучше писать на cp1251!

Я ориентировочно понимаю как должно все выглядить, НО прошу Вас отредактировать тот код который у меня есть, что бы он был рабочий.

Потому что я перепробывал все, и думаю опять будут проблемы.

PM MAIL   Вверх
DEER
Дата 22.4.2009, 18:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 749
Регистрация: 12.4.2005
Где: г. Рязань

Репутация: 1
Всего: 13



используй для AJAX jQuery 
он прекрасно работает с windows-1251


--------------------
 
PM MAIL WWW ICQ MSN   Вверх
pompei
Дата 24.4.2009, 14:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 155
Регистрация: 7.9.2007

Репутация: 2
Всего: 6



Вообще я так посмотрел, и пришел к выводу что у вас все скрипты уже написаны правильно - везде кодировка виндовая - и как мне кажеться преобразование кодировки в утф-8 вам ни чего не даст - всеравно будут крокозяблики(только другой формы). Так?

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

Напишите также каким редакором вы пользуетесь - редакторы тоже умеют шутить с кодировками.

Короче абсолютно убедитесь что оба файла в кодировке cp1251 (сравните коды одинаковых русских букв там и там)

Это сообщение отредактировал(а) pompei - 24.4.2009, 14:21
--------------------
А всё оказывается гораздо проще: пассивные наноструктуры - активные наноструктуры - системы наносистем - молекулярные наносистемы - сингулярность! По пять лет на каждый этап.
PM MAIL   Вверх
evya
Дата 25.4.2009, 18:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 257
Регистрация: 7.3.2009

Репутация: нет
Всего: нет



ТЕМА НЕ ЗАКРЫТЫ!

Прошу вас привести реальный пример!!!!!
 smile  smile  smile 
PM MAIL   Вверх
kavkaz
Дата 26.4.2009, 07:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 70
Регистрация: 26.12.2007

Репутация: 1
Всего: 2



Покажите пожалуйста ваш исправленный вариант скрипта, который вызывается ajax'ом при этом отдающий данные в cp1251 (если вы остановились на этой кодировке)

здесь никто за вас ниче писать не будет, носом ткнуть – эт можно smile
PM MAIL ICQ Skype   Вверх
mvsgt
Дата 3.6.2009, 14:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 209
Регистрация: 27.3.2009

Репутация: 1
Всего: 1



Ваш скрипт выдаёт
Код

Content-Type: text/html; charset=ISO-8859-1

<p>secret word is <b>Слово</b> and your IP is <b>94.159.19.34</b>.</p>


Смотрите что сервер в заголовках посылает.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0844 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.