2010-05-13 3 views
14

У меня возникли проблемы с получением CGI.pm для вывода на HTML5 вместо XHTML 1.0 или HTML 4.01. Когда я пытаюсь использовать "HTML5" или "HTML 5" как аргумент -dtd в start_html() Я получаю документ в HTML 4. Я также попытался импортировать :HTML5, но это тоже не работает. Любой совет?Как получить CGI.pm для вывода HTML5 вместо XHTML 1.0?

+1

Не используйте CGI.pm для создания HTML. :) –

ответ

22
  1. Правильный доктайп для HTML 5 просто "HTML", а не "html5" или "HTML 5", и не использовать DTD. CGI.pm поддерживает только хорошо сформированные DTD, а не произвольные строки. Так как в HTML 5 doctype не содержится хорошо сформированный DTD, CGI.pm (начиная с текущей версии, 3.49) не поддерживает доктрину HTML 5.

  2. Использование функций генерации HTML-кода CGI.pm обычно не одобряется в наши дни. Системы шаблонов, такие как Template::Toolkit или HTML::Template, являются предпочтительными для их способности четко отделять логику вашего кода от форматирования его вывода. Они также, кстати, позволяют указать любой тип и код до любой версии (X) HTML, которую вы выберете.

+0

Спасибо. Я применил новую версию при использовании Template :: Toolkit. Есть ли у вас рекомендации по модулям обработки HTTP? – CyberSkull

+0

Лично мне никогда не приходилось делать какие-либо низкоуровневые HTTP-материалы за пределы отправки Content-Type и некоторых файлов cookie, что достаточно просто, что вы можете избавиться от того, что CGI :: Cookie генерирует файлы cookie, а затем просто использует ' распечатать', чтобы отправить все. Если вы разместите еще один вопрос, объясняющий, какую именно обработку HTTP вы хотите сделать, я уверен, что у вас появятся хорошие предложения. –

2

Исправьте модуль, чтобы добавить поддержку HTML5 ... или просто выведите Doctype вручную, а затем используйте его как обычно. Если это действительно XHTML 1.0 или HTML 4.01, то это Valid HTML 5.

+0

Впечатляет, до четырех человек думают, что это стоит голосовать вниз ... но еще не готовы сказать, почему. – Quentin

+0

да, это не круто – Galen

+0

Я думаю, что люди голосуют, потому что «исправление» модуля CPAN - это, как правило, плохая идея. Паттинг, скорее всего, плохой совет. Наследование или, по крайней мере, патч обезьяны лучше. – codeholic

6

Вот фрагмент из некоторого кода, где я «решил» эту проблему, используя грубую силу.

# $html is accumulator for HTML string 
my $html; 

# <html> tag and <head> section 
my $dtd  = '<!DOCTYPE html>'; # HTML5 DTD 
my $title = "Storage analysis of $HOSTNAME as of $TODAY"; 
$html .= start_html(
    -title => $title, 
    -style => { 
     -code => $css, 
    } 
); 

# KLUDGE: CGI.pm doesn't support HTML5 DTD; replace the one it puts in. 
$html =~ s{<!DOCTYPE.*?>}{$dtd}s; 
3

Вот некоторые рамки perl5, которые HTML5 дружественная:

Catalyst http://www.catalystframework.org/ Dancer http://perldancer.org/documentation Mojolicious http://mojolicio.us/

Я склоняюсь к использованию Mojolicious для моего нового проекта Perl.

Все они более важны для надежных приложений HTML5, чем модуль CGI. CGI все еще имеет свое место и по-прежнему развивается/поддерживается, но не рассматривает надежные приложения HTML5, а также некоторые из представленных там фреймворков.

+0

Спасибо за подсказку! : D – CyberSkull

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