URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID8
Нить номер: 6637
[ Назад ]

Исходное сообщение
"Проблема с Apache (формы POST'ом приходят в формате HEX)"

Отправлено akmeslim , 02-Дек-09 11:24 
Добрый день, победители Apache.

Вопрос есть: Что мне поменять в конфигурации apache, чтобы пары в формах из POST приходили не в HEX формате, а в ascii или хотя бы в UTF-8.

Пример. Есть форма, например, регистрации... поля: логин, пароль, ФИО. Вводим логин, пароль и ФИО, нажимаем на SUBMIT, форма "ушла" методом POST. На сервере скрипт принял эти данные и в парах вот что получаю: login=login1&password=password1&FIO=% D4% D5% D4% F7% C1% DB% F0% C1% D2% CF% CC% D8

Так вот речь идет как раз про строчку % D4% D5% D4% F7% C1% DB% F0% C1% D2% CF% CC% D8, как мне вытащить нормальную читающуюся строчку FIO.

Много где читаю, все просто если у вас стоит "русский" apache.

ЗЫ. После процента стоит лишний пробел.


Содержание

Сообщения в этом обсуждении
"Проблема с Apache (формы POST'ом приходят в формате HEX)"
Отправлено Pahanivo , 02-Дек-09 12:05 
urldecode ? )



"Проблема с Apache (формы POST'ом приходят в формате HEX)"
Отправлено akmeslim , 02-Дек-09 12:55 
>urldecode ? )

Да типа того... )


"Проблема с Apache (формы POST'ом приходят в формате HEX)"
Отправлено Pahanivo , 02-Дек-09 14:10 
>>urldecode ? )
>
>Да типа того... )

ну дык в чем проблема? в локали? )


"Проблема с Apache (формы POST'ом приходят в формате HEX)"
Отправлено akmeslim , 03-Дек-09 05:46 
>>>urldecode ? )
>>
>>Да типа того... )
>
>ну дык в чем проблема? в локали? )

urldecode я насколько понимаю - это в php. скриптик написан на csh.
Проблема пока не решена. Разбираюсь дальше с apache. Не хотелось бы городить еще один скрипт по перекодировки. Как вариант можно конечно использовать и php, но есть свои ограничения на это...


"Проблема с Apache (формы POST'ом приходят в формате HEX)"
Отправлено Pahanivo , 03-Дек-09 07:44 
>[оверквотинг удален]
>>>
>>>Да типа того... )
>>
>>ну дык в чем проблема? в локали? )
>
>urldecode я насколько понимаю - это в php. скриптик написан на csh.
>
>Проблема пока не решена. Разбираюсь дальше с apache. Не хотелось бы городить
>еще один скрипт по перекодировки. Как вариант можно конечно использовать и
>php, но есть свои ограничения на это...

какие ограничения? ))


"Проблема с Apache (формы POST'ом приходят в формате HEX)"
Отправлено akmeslim , 18-Мрт-10 12:35 
>[оверквотинг удален]
>>>
>>>ну дык в чем проблема? в локали? )
>>
>>urldecode я насколько понимаю - это в php. скриптик написан на csh.
>>
>>Проблема пока не решена. Разбираюсь дальше с apache. Не хотелось бы городить
>>еще один скрипт по перекодировки. Как вариант можно конечно использовать и
>>php, но есть свои ограничения на это...
>
>какие ограничения? ))

На сервере не установлен php, и не предполагается.
Проблему решил использую скрипты на csh.
Костыли, но работает отлично. Если кто решил проще, прощу в студию.

создал 2 файла:

Первый файл вспомогательный con2text_run.sh
Можно подавать строку на стандартный ввод или в качестве аргумента, работает так и так.
Из данного файла запускается непосредственно скрипт con2text.sh, который и перекодирует посимвольно.

#!/bin/csh

if ( $1 == "" ) then
set string1 = `tee`;
else
set string1 = `echo $1`;
endif

set string2 = "";
set num = `echo $string1 | wc -c`
#echo $num
set i = 1
set string1 = `echo $string1 | sed 's/\&\#8470\;/#/g'`

while ( $i <= `expr $num` )
#echo `echo $string1 | head -c $i | tail -c 13`
    if ( `echo $string1 | head -c $i | tail -c 13` == "№" ) then
        set string2 = $string2"#"
        set i = `expr $i + 12`
    else
        if !( `echo $string1 | head -c $i | tail -c 1` == "%" ) then
            set string2 = $string2""`echo $string1 | head -c $i | tail -c 1`
            set i = `expr $i + 1`
        else
            set head1 = `expr $i + 2`
            set string3 = `echo $string1 | head -c $head1 | tail -c 3 | /usr/local/www/apache22/cgi-bin/con2text.sh`
            if ( $string3 == "+" ) then
                set string3 = "FFFFOOOOBBBBAAAARRRR"
                echo "+"
            endif
            set string2 = $string2""$string3
            set i = `expr $i + 3`
        endif
    endif
end
echo `echo $string2 | sed 's/+/ /g;s/FFFFOOOOBBBBAAAARRRR/+/g'`
exit


Второй файл con2text.sh в котором происходит посимвольная перекодировка:
#!/bin/csh


if ( $1 == "" ) then
set char_c = `tee | head -c 3`;
else
set char_c = `echo $1 | head -c 3`;
endif

set char_o = $char_c;

if ( $char_c == "Й") then
set char_o = "Й"
endif
if ( $char_c == "Ц") then
set char_o = "Ц"
endif
if ( $char_c == "У") then
set char_o = "У"
endif
if ( $char_c == "К") then
set char_o = "К"
endif
if ( $char_c == "Е") then
set char_o = "Е"
endif
if ( $char_c == "Н") then
set char_o = "Н"
endif
if ( $char_c == "Г") then
set char_o = "Г"
endif
if ( $char_c == "Ш") then
set char_o = "Ш"
endif
if ( $char_c == "Щ") then
set char_o = "Щ"
endif
if ( $char_c == "З") then
set char_o = "З"
endif
if ( $char_c == "Х") then
set char_o = "Х"
endif
if ( $char_c == "Ъ") then
set char_o = "Ъ"
endif
if ( $char_c == "Ф") then
set char_o = "Ф"
endif
if ( $char_c == "Ы") then
set char_o = "Ы"
endif
if ( $char_c == "В") then
set char_o = "В"
endif
if ( $char_c == "А") then
set char_o = "А"
.......
if ( $char_c == "(") then
set char_o = "("
endif
if ( $char_c == ")") then
set char_o = ")"
endif
if ( $char_c == "+") then
set char_o = "+"
endif
if ( $char_c == "@") then
set char_o = "@"
endif
if ( $char_c == "#") then
set char_o = "#"
endif
if ( $char_c == "$") then
set char_o = "\$"
endif
if ( $char_c == "%") then
set char_o = "%"
endif
if ( $char_c == "^") then
set char_o = "^"
endif
if ( $char_c == "&") then
set char_o = "&"
endif
if ( $char_c == "~") then
set char_o = "~"
endif
if ( $char_c == "Ё") then
set char_o = "Ё"
endif
if ( $char_c == "ё") then
set char_o = "ё"
endif
if ( $char_c == "=") then
set char_o = "="
endif
if ( $char_c == ",") then
set char_o = ","
endif
if ( $char_c == "'") then
set char_o = "'"
endif
if ( $char_c == "/") then
set char_o = "/"
endif
if ( $char_c == "\") then
set char_o = "\"
endif
if ( $char_c == "|") then
set char_o = "|"
endif

echo $char_o;



"Проблема с Apache (формы POST'ом приходят в формате HEX)"
Отправлено Iceweasel , 18-Мрт-10 22:51 
>>[оверквотинг удален]

ППЦ. Хороший пример тому что если не работает голова - работают руки :)


"Проблема с Apache (формы POST'ом приходят в формате HEX)"
Отправлено cuad0 , 19-Мрт-10 01:17 
<skip>
>Проблему решил использую скрипты на csh.
>Костыли, но работает отлично. Если кто решил проще, прощу в студию.

Тогда уж юзайте perl. Эту задачу (парсинг формы) решали еще в прошлом тысячелетии, как ручками, так и готовыми модулями.
погуглите что-нить вокруг ключевых слов "perl cgi cgi.pm form parsing"

Но даже если и не использовать доп. модули типа CGI и парсить ручками (10 строк кода, чесслово. О, кстати, вспомнил, поищите книжку Маслова Введение в perl. Там такой пример есть), то нужно иметь в виду, что браузеры не всегда отсылают POST в utf. Насколько помню, хотя могу и ошибаться, они используют ту кодировку, в которой написана страница с формой. Причем раньше вообще были грабли из-за того, что разные браузеры по-разному трактовали кодировку страницы, когда имелся заголовок Text-Content с одним charset и <meta> с другим charset.

Если владеете англ., то почитайте, напр. http://www.blooberry.com/indexdot/html/topics/urlencoding.htm и узнаете откуда взялся такой формат.

>#!/bin/csh
>...

Чем-то индийский код напоминает :)


"Проблема с Apache (формы POST'ом приходят в формате HEX)"
Отправлено akmeslim , 19-Мрт-10 08:13 
>[оверквотинг удален]
>
>Но даже если и не использовать доп. модули типа CGI и парсить ручками (10 строк кода, чесслово. О, кстати, вспомнил, поищите книжку Маслова Введение в perl. Там такой пример есть), то нужно иметь в виду, что браузеры не всегда отсылают POST в utf. Насколько помню, хотя могу и ошибаться, они используют ту кодировку, в которой написана страница с формой. Причем раньше вообще были грабли из-за того, что разные браузеры по-разному трактовали кодировку страницы, когда имелся заголовок Text-Content с одним charset и <meta> с другим charset.
>
>Если владеете англ., то почитайте, напр. http://www.blooberry.com/indexdot/html/topics/urlencoding.htm и узнаете откуда взялся такой
>формат.
>
>>#!/bin/csh
>>...
>
>Чем-то индийский код напоминает :)

Благодарен за критику :). С Английским хорошо. Почитаю.
На счет perl - тут правда, упустил... Скил слабый...