Добрый день, победители 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.
ЗЫ. После процента стоит лишний пробел.
urldecode ? )
>urldecode ? )Да типа того... )
>>urldecode ? )
>
>Да типа того... )ну дык в чем проблема? в локали? )
>>>urldecode ? )
>>
>>Да типа того... )
>
>ну дык в чем проблема? в локали? )urldecode я насколько понимаю - это в php. скриптик написан на csh.
Проблема пока не решена. Разбираюсь дальше с apache. Не хотелось бы городить еще один скрипт по перекодировки. Как вариант можно конечно использовать и php, но есть свои ограничения на это...
>[оверквотинг удален]
>>>
>>>Да типа того... )
>>
>>ну дык в чем проблема? в локали? )
>
>urldecode я насколько понимаю - это в php. скриптик написан на csh.
>
>Проблема пока не решена. Разбираюсь дальше с apache. Не хотелось бы городить
>еще один скрипт по перекодировки. Как вариант можно конечно использовать и
>php, но есть свои ограничения на это...какие ограничения? ))
>[оверквотинг удален]
>>>
>>>ну дык в чем проблема? в локали? )
>>
>>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`;
endifset 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`;
endifset 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 = "|"
endifecho $char_o;
>>[оверквотинг удален]ППЦ. Хороший пример тому что если не работает голова - работают руки :)
<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
>...Чем-то индийский код напоминает :)
>[оверквотинг удален]
>
>Но даже если и не использовать доп. модули типа CGI и парсить ручками (10 строк кода, чесслово. О, кстати, вспомнил, поищите книжку Маслова Введение в perl. Там такой пример есть), то нужно иметь в виду, что браузеры не всегда отсылают POST в utf. Насколько помню, хотя могу и ошибаться, они используют ту кодировку, в которой написана страница с формой. Причем раньше вообще были грабли из-за того, что разные браузеры по-разному трактовали кодировку страницы, когда имелся заголовок Text-Content с одним charset и <meta> с другим charset.
>
>Если владеете англ., то почитайте, напр. http://www.blooberry.com/indexdot/html/topics/urlencoding.htm и узнаете откуда взялся такой
>формат.
>
>>#!/bin/csh
>>...
>
>Чем-то индийский код напоминает :)Благодарен за критику :). С Английским хорошо. Почитаю.
На счет perl - тут правда, упустил... Скил слабый...