Forum Webscript.Ru

Программирование => Perl => Тема начата: restart2003 от 14 Мая 2005, 06:59:19

Название: Кодировка и multipart/form-data
Отправлено: restart2003 от 14 Мая 2005, 06:59:19
Странно, почему-то на Perl-форуме при отправке данных из формы multipart/form-data методом POST меняется кодировка страницы на ISO, хотя в метатегах явно указана windows-1251 ().  При отправке из обычной формы, или при сёрфинге форума всё впорядке. Никто не сталкивался?
Название: Кодировка и multipart/form-data
Отправлено: ondr от 14 Мая 2005, 07:39:45
у всех подобных вопросов только один ответ: кодировка, указанная в залоговке, отличается от кодировки, указанной в метатегах.

imho: оптимальное решение, высылать верный заголовок и отказаться от использования метатегов
Название: Кодировка и multipart/form-data
Отправлено: restart2003 от 14 Мая 2005, 09:42:51
Дык.
Есть sub header, отвечающий за заголовки.
Там есть примерно следующее:

$params{\'-charset\'} = "; charset=windows-1251";
$ret .= "$params{\'Content-Encoding\'}Content-Type: text/html$params{\'-charset\'}\\n\\n";
return $ret;

Так вот именно при передаче из multipart-формы, как установлено опытным путём, кодировка в браузере устанавливается в ISO (на странице, куда идёт POST. после перехода по любой ссылке кодировка опять становится нормальной). Во всех остальных случаях кодирока работает нормально.
Движок изрядно модифицированный фриварный, я уже перерыл всё на пример от чего это может быть, ничего не нашёл :(
Пока единтсвенное работающее решение: выдавать на странице, куда идёт POST, простой Location в  заголовке на другую страницу, на которой уже проблем с кодировкой нет. Но это не очень удобно, точнее очень неудобно.
Да, используется gzip сжатие.
Название: Кодировка и multipart/form-data
Отправлено: ondr от 14 Мая 2005, 13:05:30
если знаешь, в каком месте искать, то не ничего проще.
перед высылкой заголовка после той самой пост формы, вышли заголовок "Content-Type: text/plain\\r\\n\\r\\n". после увидишь злополучный заголовок прям в броузере


ps: прекрасный пример для противников(и персонально для Phoinix\'а) использования спец. софта формирующего более или менее корректный заголовок. Вроде как ничего сложного, но временами ошибки то вылезают, если вручную : )

pps: "простой Location в заголовке" это не очень хорошо.. обычно спец. софт приправляет его полем "Status: 30...", иначе apache(да и не только) может вести себя не так, как хотелось бы
Название: Кодировка и multipart/form-data
Отправлено: restart2003 от 15 Мая 2005, 01:10:31
Обнаружил интересную особенность: после поста в multipart-форму функция header не работает вообще. В этом и корень зла. Странно, я до сих пор не могу понять, почему она не срабатывает. Заголовки страницы после поста я всё-таки просмотрел, вот кусок без кукисов:
Date: Sat, 14 May 2005 19:31:33 GMT
Content-encoding: gzip
Content-Type: text/html; charset=ISO-8859-1

Буду пытаться разобраться... Всё осложняется тем, что большинство кода и собсно структура движка - не моё. Разбираться в чужом коде всегда сложнее.
Цитировать
простой Location в заголовке" это не очень хорошо.. обычно спец. софт приправляет его полем "Status: 30...",

Ну тогда сделал так:
print header(-status=>"302 Moved Temporarily", -location=>$SetLocation);