Форум 3DNews
Вернуться   Форум 3DNews > Программирование > Web-программирование

Ответ Создать новую тему
Опции темы Опции просмотра
Непрочитано 27.11.2007, 20:41   [включить плавающее окно]   #1
RMV
Мужской Общительный
Автор темы
 
Регистрация: 22.12.2003
Адрес: Н.Н.
Пересылка руских букв JavaScript (Ajax) на сервер (Perl)

Проблема:
Посылаю запрос на сервер (вот отрывок):
Код:
				//url = url + "?text="+encodeURIComponent(text);
				url = url + "?text="+text;
				//url = url + "?text="+escape(text);	alert (unescape(url));
				//создаём запрос  
	            this. http.open("GET", url, true);
Запрос приходит, но если буквы русские, то он (Perl) их не распознаёт, а если англ. или цыфирь - фурычит. (заремованы др. варианты кои тестил.)
Мож. надо их как-то по особому принимать?

PS: Perl 5.0 у хостера
На серваке код:

Код:
#!/usr/bin/perl
use CGI qw(:standard);

print "Content-type: text/html; charset=windows-1251\n\n";

@bufer = param();	# Получение параметров
my %pageParam = ();	# Параметры страницы
		$pageParam{'text'} = param('text');

print "$pageParam{'text'}\t$pageParam{'text'}\nГорький\tГорький\n";

if ($pageParam{'text'} eq 'M'){print "Москва\tМосква";}
if ($pageParam{'text'} eq 'Н'){print "НН\tНН";}
if ($pageParam{'text'} eq 'Москва'){print "Москва\tМосква";}
if ($pageParam{'text'} eq 'Ниж'){print "NN\tNN";}

if ($pageParam{'text'} eq '123'){print "123\t123\n123123\t123123";}
if ($pageParam{'text'} eq '123123'){print "123123\t123123";}
if ($pageParam{'text'} eq 'qaz'){print "qaz\tqaz";}
if ($pageParam{'text'} eq 'zaq'){print "zaq\tzaq";}

if ($pageParam{'text'} eq 'wsx'){print "цыч\tцыч";}
if ($pageParam{'text'} eq 'цыч'){print "wsx\twsx";}

if ($pageParam{'text'} eq 'йфя'){print "йфя\tйфя";}

if (length($pageParam{'text'})>0) {print length($pageParam{'text'}) . "\t" . length($pageParam{'text'});}

Необходимо сделать нечто наподобие интелектуального ввода (или разновидность SELECT со списком), т.е. человек начинает вводить русское слово, а ему предлагается несколько вариантов.

Подскажите, плз.
__________________
Hi, from RMV!
RMV вне форума  
Ответить с цитированием
Непрочитано 30.11.2007, 16:12   [включить плавающее окно]   #2
Simon Logic
Мужской Продвинутый
 
Регистрация: 23.07.2003
Адрес: Брянск
А в какой кодировке сохранен .pl файл на сервере?
Simon Logic вне форума  
Конфигурация ПК
Ответить с цитированием
Непрочитано 30.11.2007, 16:29   [включить плавающее окно]   #3
pl_Vah
Мужской Опытный
 
Аватар для pl_Vah
 
Регистрация: 25.05.2004
Адрес: Moscow
ну начнем с того что яваскрипт присылает тебе все в utf-8......
следовательно чтобы у тебя небыло кареказябр тебе надо сделать преобразование utf8->cp1251

Код:
use Text::Iconv;
$converter = Text::Iconv->new("utf-8", "windows-1251");
$converted = $converter->convert("utf-8 text to convert");
pl_Vah вне форума  
Конфигурация ПК
Ответить с цитированием
Непрочитано 01.12.2007, 23:45   [включить плавающее окно]   #4
RMV
Мужской Общительный
Автор темы
 
Регистрация: 22.12.2003
Адрес: Н.Н.
Simon Logic
Кодировка нужная, но пока тестю на Денвере.
pl_Vah
Попробую, но у Хостера такого модуля нет, как и в Денвере (вроде).

Результат - сообщу!
__________________
Hi, from RMV!
RMV вне форума  
Ответить с цитированием
Непрочитано 02.12.2007, 17:24   [включить плавающее окно]   #5
pl_Vah
Мужской Опытный
 
Аватар для pl_Vah
 
Регистрация: 25.05.2004
Адрес: Moscow
RMV и что? а что у них все должно быть?.....
http://search.cpan.org/dist/Text-Iconv/
я тебе указал направление..... решение не претендует на то что им можно пользоваться везде и всегда.... в данном случае - нельзя из-за ограничения хостинга.....
кароче думай как тебе из utf-8 в cp1251 перекодировать........

попробуй поиском попользоваться....
pl_Vah вне форума  
Конфигурация ПК
Ответить с цитированием
Непрочитано 05.12.2007, 11:41   [включить плавающее окно]   #6
phasma
Мужской Team 3DNews
 
Аватар для phasma
 
Регистрация: 14.07.2007
Адрес: Мск
http://dklab.ru/lib/Js HttpRequest/ ?
__________________
Я не тролль(с)
phasma вне форума  
Ответить с цитированием
Непрочитано 07.12.2007, 01:55   [включить плавающее окно]   #7
RMV
Мужской Общительный
Автор темы
 
Регистрация: 22.12.2003
Адрес: Н.Н.
phasma
Так это ж вроде для PHP, а мне для Perl нужно...

PS: Что можите сказать о http://jquery.com/ Подойдёт нет? Или тоже надо просить хостера стаить модуль?
__________________
Hi, from RMV!
RMV вне форума  
Ответить с цитированием
Непрочитано 07.12.2007, 03:50   [включить плавающее окно]   #8
phasma
Мужской Team 3DNews
 
Аватар для phasma
 
Регистрация: 14.07.2007
Адрес: Мск
RMV какая разница ... вам токо PHP скрипты перевести на перл и все ... иль выдрать JS оттуда ... библиотек и фрейвоков не пробовал, писал все сам ... так что могу порекомендовать токо отказаться от AJAX, тк кэширования нет и есть вероятность положить сервер при большой посещаемости ))
__________________
Я не тролль(с)
phasma вне форума  
Ответить с цитированием
Непрочитано 07.12.2007, 13:45   [включить плавающее окно]   #9
pl_Vah
Мужской Опытный
 
Аватар для pl_Vah
 
Регистрация: 25.05.2004
Адрес: Moscow
phasma а зачем тебе для AJAX кеширование?

понятно что все кинулись целиком сайты писать на аяксе - услышали новое слово и понеслось...... но это от собственного дебилизма......
AJAX нужен для реализации фунекциональных вещей..... самое простое - положить товар в корзину, голосование, быстрый ответ в форуме (блоге или ещё где) и так далее..... кароч можно сказать что он для написания приложений для пользователя.....

ну и если у программистов руки прямые - сервера от нагрузки не полягут.... =) темболее возьмем тоже самое голосование....... проголосовал - запрос сделал к маленькому скриптику..... он сделал пару инсертов и пару селектов и вернул рез-таты голосования....... или проголосовал и перегрузил всю страницу с много селектов из-за пары инсертов...... поидее эта технология как раз и должна разгружать сервера и экономить трафик....... вот тока использовать ее надо уметь.... и ненадо ее юзать везде где попало....
pl_Vah вне форума  
Конфигурация ПК
Ответить с цитированием
Непрочитано 07.12.2007, 14:48   [включить плавающее окно]   #10
phasma
Мужской Team 3DNews
 
Аватар для phasma
 
Регистрация: 14.07.2007
Адрес: Мск
при таком вводе как указано выше, т.е. вводишь букву, тебе возвращается список слов .. потом еще одну, более конкретный список слов ... итд ... при вводе слова в 4 букв было создано 4 обращений к серверу, к примеру слово было "пиво" а сколько там может результатов вывалиться ... пиво голандское, чешское, жигулевское ... итд .. и это при каждом запросе ... т.е. вы получаете не быстрое обновление контента без перезагрузки всей страницы, а огромный поток потом хлама, который забивает канал )))
__________________
Я не тролль(с)
phasma вне форума  
Ответить с цитированием
Непрочитано 07.12.2007, 17:57   [включить плавающее окно]   #11
pl_Vah
Мужской Опытный
 
Аватар для pl_Vah
 
Регистрация: 25.05.2004
Адрес: Moscow
phasma
ну если грамотно организовать табличку - то получиться поиск по циферкам..... что быстрее чем поиск по буквам......
потом при таком вводе программист всегда может организовать такие списки частично без запросов к БД......
причем думаю имеет смысл предусмотреть что-то от быстропечатающих тогда....... ато я зажму буковку и завалю все что можно..... будут потом админы орать что их досят досями с железными мочалками..... =)

так что тут вопрос реализации..... если руки прямые - все нормально будет..... а если нет........ ну на нет и суда нет......
pl_Vah вне форума  
Конфигурация ПК
Ответить с цитированием
Непрочитано 26.12.2007, 14:35   [включить плавающее окно]   #12
RMV
Мужской Общительный
Автор темы
 
Регистрация: 22.12.2003
Адрес: Н.Н.
Мне надо, чтобы показывались Города. Выводятся скажем 5 ближайших варианта.
Есть ограничение: не менее 3-х символов (т.к. есть Уфа). Есть ограничение на Max символов.
Есть подозрение, что есть стандартная реализация данной функции.
Предположим из JS можно отсылать запрос не чаще, чем в 0,5 сек.
А вот как проверить на сервере, что слишком часто поступают запросы с этого IP, причём так, чтобы это было быстрее, чем просто вывести ответ?
__________________
Hi, from RMV!
RMV вне форума  
Ответить с цитированием
Непрочитано 26.12.2007, 20:41   [включить плавающее окно]   #13
pl_Vah
Мужской Опытный
 
Аватар для pl_Vah
 
Регистрация: 25.05.2004
Адрес: Moscow
проверить просто....... просто не посылать яваскриптом эти запросы.....
а ДДоС - он и в африке ДДоС..... захотят положить - явно не мелкому селекту обращаться будут.....

вся реализация сего на жаба скрипте....... примеров - полно...... посмотри хотябы на www.google.com..... вводишь а тебе там варианты......
pl_Vah вне форума  
Конфигурация ПК
Ответить с цитированием
Непрочитано 27.12.2007, 13:02   [включить плавающее окно]   #14
RMV
Мужской Общительный
Автор темы
 
Регистрация: 22.12.2003
Адрес: Н.Н.
pl_Vah
Как ни странно, но именно этот "самый распространённый пример" лично у меня не работает (т.е. на ввод ни какого списка не отображается)! Почему, не знаю. (Opera + FF)
Я не сабираюсь переводить весь сайт на Ajax, но... необходим удобный и быстрый ввод городов.
Основное требование: кроссбраузерность!
Если знаете как реализовать по другому - пишите, буду рад.
__________________
Hi, from RMV!
RMV вне форума  
Ответить с цитированием
Непрочитано 05.01.2008, 12:47   [включить плавающее окно]   #15
RMV
Мужской Общительный
Автор темы
 
Регистрация: 22.12.2003
Адрес: Н.Н.
pl_Vah
Цитата
захотят положить - явно не мелкому селекту обращаться будут
А мне именно "мелкий селект" и нужен.
Но всё равно - мне интересно - какие есть меры защиты? (Кроме полной проверки входящих данных?)
PS: Хостер нужный модуль, пока как вы догадались, не поставил. Жду конца празников.
__________________
Hi, from RMV!
RMV вне форума  
Ответить с цитированием
Непрочитано 07.01.2008, 00:44   [включить плавающее окно]   #16
pl_Vah
Мужской Опытный
 
Аватар для pl_Vah
 
Регистрация: 25.05.2004
Адрес: Moscow
RMV
1) посмотри JS библиотеку prototype - там ты легко сможешь запросы посылать примерно такого вида: http://www.any.host/city.php?start=Моск
2) ну а на сервере - сам понимаешь как запрос сделать и что отдать скрипту...
pl_Vah вне форума  
Конфигурация ПК
Ответить с цитированием
Непрочитано 14.07.2008, 14:05   [включить плавающее окно]   #17
RMV
Мужской Общительный
Автор темы
 
Регистрация: 22.12.2003
Адрес: Н.Н.
Решение:
Код:
//---------------------------------------------------------------------------------------------------------------------//
// Перекодировка из UTF в русскую
var trans = []; trans[0x401] = 0xA8; trans[0x451] = 0xB8;
for (var i = 0x410; i <= 0x44F; i++) trans[i] = i - 0x350; // >

function myEscape (str) {
	var ret = [];
	for (var i = 0; i < str.length; i++) {
	var n = str.charCodeAt(i);
	if (typeof trans[n] != 'undefined') n = trans[n];
	if (n <= 0xFF) ret.push(n);
}
return escape(String.fromCharCode.apply(null, ret));
}
//---------------------------------------------------------------------------------------------------------------------//
__________________
Hi, from RMV!
RMV вне форума  
Ответить с цитированием
Ответ Создать новую тему

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 09:19. Часовой пояс GMT +3.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 2000-2017 3DNews. All Rights Reserved.
Администрация 3DNews требует соблюдения на форуме правил и законов РФ
Серверы размещены в Hostkey