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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с enter'ами, Удаляются при отправке 
:(
    Опции темы
Konsul
Дата 2.7.2008, 15:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Проблема в том, что удаляются символы переноса на след строку.
При помощи формы отправляю некоторый текстовый блок скрипту:
Код

<form action="myscript.cgi" method=post>
<textarea name=text rows=18 cols=40></textarea>
<input type="Submit" value="Отправить">
</form>


И обрабатывается след. образом:

Код

sub urldecode {
 local($val)=@_;
 $val=~s/\+/  /g;
 $val=~s/%([0-9A-H]{2})/pack('C', hex($1))/ge;
 return $val
 }

if($ENV{'REQUEST_METHOD'} eq 'GET'){$query=$ENV{'QUERY_STRING'};}
elsif($ENV{'REQUEST_METHOD'} eq 'POST'){sysread(STDIN,$query,$ENV{'CONTENT_LENGTH'});}

@formfields=split(/&/, $query);
foreach(@formfields){
 if(/^text=(.*)/){$text=&urldecode($1);}
 }


Вообщем, всё стандартно. И если ввести в текстовое поле:

бла
бла
бла

то в переменной $text получим просто строку: бла бла бла, т.е. оно слепит все строки в одну, разграничив пробелом.
Помогите, пожалуйста, разобраться, как сделать так, чтобы строки сохраняли свою целостность?

И ещё одна проблема. Если ввести в текстовое поле довольно большой кусок текста, то после обработки часть его отсекается. Очевидно, что  CONTENT_LENGTH почему то неверно даёт длину строки. Подскажите, что здесь можно сделать?
Я временно решил проблему тем, что поменял метод отправки формы с post на get. Теперь хоть оно выводит всё сообщение в адресной строке, зато не обрывает текст.

Заранее благодарен!
PM MAIL   Вверх
Nab
Дата 2.7.2008, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Первое попробуйте указать способ кодировки 

http://htmlbook.ru/html/form.html смотрите атрибут enctype.

Второе это регулярка дикая
Код
 $val=~s/%([0-9A-H]{2})/pack('C', hex($1))/ge;

при чем тут H ? насколько мне известно шестнадцеричные цифры оканчмваються F.
А вы еже две буквы прихватили.
Потом а как быть с [a-f]? поставьте в конце регулярки i, чтобы оно регистр не учитывало.

И третье, последнее, еще один изобретатель велосипеда :( 
use CGI;
религия не позволяет сделать?


--------------------
 Чтобы правильно задать вопрос нужно знать больше половины ответа...
Perl Community 
FREESCO in Ukraine 
PM MAIL   Вверх
tolkien
Дата 2.7.2008, 17:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Если пропадают символы в значении параметров то ищи проблему в urldecode. Ты ее проверял? Она корректна работает? 

Nab
А вы знаете сколько CGI занимает строк кода? Программный код больше 3000 строк, с коментариями больше 7 тысяч. Для простого чтения параметров запроса каждый раз загружать такую дуру. Как правило кроме param() ничего ненужно. Так лучше написать маленький модуль который будет делать только то, что надо.

Добавлено через 2 минуты и 35 секунд
Код

 if(/^text=(.*)/){$text=&urldecode($1);}
 }


Ошибка здесь 

. - все символы кроме \n, поэтому у тебя не попадает \n в переменную $1
PM MAIL   Вверх
Konsul
Дата 2.7.2008, 19:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(tolkien @  2.7.2008,  17:24 Найти цитируемый пост)
 Ты ее проверял? Она корректна работает? 

Ок, проверю


Цитата(tolkien @  2.7.2008,  17:24 Найти цитируемый пост)
Ошибка здесь . - все символы кроме \n, поэтому у тебя не попадает \n в переменную $1

А как тогда сделать?
PM MAIL   Вверх
GoDleSS
Дата 2.7.2008, 23:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата

А вы знаете сколько CGI занимает строк кода? Программный код больше 3000 строк, с коментариями больше 7 тысяч. Для простого чтения параметров запроса каждый раз загружать такую дуру. Как правило кроме param() ничего ненужно. Так лучше написать маленький модуль который будет делать только то, что надо.

Есть замечательны модуль, который гораздо меньше по объему, сравнительно миниатюрен по функциям, но вполне подходит для 90% веб-скриптов.
http://search.cpan.org/~ondr/PCGI-0.28/lib/PCGI.pm
--------------------
It's a nice day to die my friend!
PM MAIL WWW ICQ   Вверх
tolkien
Дата 3.7.2008, 08:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Konsul
Например сделай так
Код

 if(/^text=(.*)/){$text=&urldecode("$1\n");}

PM MAIL   Вверх
nitr
Дата 3.7.2008, 19:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



а 
Код

if (/^text=(.*)/s){ $text = urldecode($1); }
 не сработает?


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


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

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


 




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


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

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