Бажок HTML::FillInForm

Оцените, пожалуйста

Как оказалось, пакет HTML::FillInForm использует свою собственную реализацию функции escapeHTML, отличную от реализации в пакете CGI.

Поэтому если вы используете HTML::FillInForm или CGI::Application::Plugin::FillInForm (который по сути есть интерфейс к первому) для обработки форм со значениями, заэскейпленными через CGI::escapeHTML, вы может столкнуться с некорректной "подсветкой" выбранного значения одной из <option> внутри <select>, к примеру (непростановка атрибута selected там, где необходимо).

Проблема заключается в том, что HTML::FillInForm использует пакет HTML::Parser для разбора передаваемого кода, который в свою очередь при разборе разэскейпивает в текущую кодировку, из-за чего пакету HTML::FillInForm необходимо использовать функцию escapeHTML для значений атрибутов тэгов после парсера при сравнения со значением параметров пользователя, переданных для заполнения формы. Если используются разные реализации escapeHTML (пользователем и пакетом), то в некоторых случаях получаются "разные" одинаковые строки. 🙂

Для исправления ситуации достаточно добавить следующий код в начало вашего скрипта:


use HTML::FillInForm;

package HTML::FillInForm;
use CGI (qw/escapeHTML/);

sub escapeHTML {
  my ($self, $toencode) = @_;
  return undef unless defined($toencode);
  return CGI::escapeHTML($toencode);
}
1;

Поделиться:
  • Twitter
  • LiveJournal
  • Блог Я.ру
  • Блог Li.ру
  • Google Buzz
  • Добавить ВКонтакте заметку об этой странице
  • Мой Мир
  • Одноклассники
  • Facebook
  • FriendFeed
  • В закладки Google
  • LinkedIn
  • StumbleUpon
  • Technorati
  • Digg
  • БобрДобр
  • MisterWong.RU
  • Memori.ru
  • МоёМесто.ru
  • Сто закладок

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *