Автор Тема: Кодировка и multipart/form-data  (Прочитано 4128 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн restart2003

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 58
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Кодировка и multipart/form-data
« : 14 Мая 2005, 06:59:19 »
Странно, почему-то на Perl-форуме при отправке данных из формы multipart/form-data методом POST меняется кодировка страницы на ISO, хотя в метатегах явно указана windows-1251 ().  При отправке из обычной формы, или при сёрфинге форума всё впорядке. Никто не сталкивался?

Оффлайн ondr

  • Модератор
  • Глобальный модератор
  • Старожил
  • *****
  • Сообщений: 440
  • +0/-0
  • 0
    • Просмотр профиля
Кодировка и multipart/form-data
« Ответ #1 : 14 Мая 2005, 07:39:45 »
у всех подобных вопросов только один ответ: кодировка, указанная в залоговке, отличается от кодировки, указанной в метатегах.

imho: оптимальное решение, высылать верный заголовок и отказаться от использования метатегов
« Последнее редактирование: 14 Мая 2005, 07:44:51 от ondr »
0 OK, 0:1

Оффлайн restart2003

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 58
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Кодировка и multipart/form-data
« Ответ #2 : 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 сжатие.
« Последнее редактирование: 14 Мая 2005, 09:48:28 от restart2003 »

Оффлайн ondr

  • Модератор
  • Глобальный модератор
  • Старожил
  • *****
  • Сообщений: 440
  • +0/-0
  • 0
    • Просмотр профиля
Кодировка и multipart/form-data
« Ответ #3 : 14 Мая 2005, 13:05:30 »
если знаешь, в каком месте искать, то не ничего проще.
перед высылкой заголовка после той самой пост формы, вышли заголовок "Content-Type: text/plain\\r\\n\\r\\n". после увидишь злополучный заголовок прям в броузере


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

pps: "простой Location в заголовке" это не очень хорошо.. обычно спец. софт приправляет его полем "Status: 30...", иначе apache(да и не только) может вести себя не так, как хотелось бы
0 OK, 0:1

Оффлайн restart2003

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 58
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Кодировка и multipart/form-data
« Ответ #4 : 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);

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28