2010-12-01 2 views
0

Я использую mod_perl2 для веб-сайта и использую CGI :: Apache2 :: Wrapper, чтобы получить параметры запроса для страницы (например, данные для публикации). Я заметил, что строка, возвращаемая функцией $ req-> param ("parameter"), не является UTF-8. Если я использую строку as-is, я могу закончить искаженные результаты, поэтому мне нужно ее декодировать с помощью Encode :: decode_utf8(). Есть ли какой-либо способ либо получить параметры, уже декодированные в строки UTF-8, либо выполнить петлю через параметры и безопасно декодировать их?Получение параметров строки запроса UTF-8 в mod_perl2

ответ

1

Чтобы получить параметры уже декодируется, мы должны переопределить поведение базового класса Apache2::Request от libapreq2, таким образом, теряет свою скорость XS преимущество. Но это даже не просто возможным, так как, к сожалению, мы сорваны CGI::Apache2::Wrapper конструктор:

unless (defined $r and ref($r) and ref($r) eq 'Apache2::RequestRec') { 

Это неправильно ориентированное программирование, он должен сказать

… $r->isa('Apache2::RequestRec') 

или, возможно, отказаться от названия класса в целом и просто тест для поведения (… $r->can('param')).

Я говорю, что с этими препятствиями это не стоит. Я рекомендую сохранить существующее решение, которое явно декодирует параметры. Это достаточно ясно.

Чтобы запрограммировать параметры запроса, просто не передавайте аргумент методу param и вы получаете список имен. Это документировано (1, 2), пожалуйста, прочитайте более внимательно.

+0

Спасибо, это в значительной степени подтвердило то, чего я боялся. Моя первоначальная мысль заключалась в том, чтобы использовать $ req-> param() для получения таблицы и прокрутки параметров там. Я мог бы получить объект таблицы для параметров, но когда я попытался установить какой-либо параметр, он ошибся, сказав, что STORE не был реализован. – 2010-12-03 04:22:53

Смежные вопросы