.\" Automatically generated by Pod::Man 2.27 (Pod::Simple 3.28) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. \*(C+ will .\" give a nicer C++. Capital omega is used to do unbreakable dashes and .\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, .\" nothing in troff, for use with C<>. .tr \(*W- .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ . ds -- \(*W- . ds PI pi . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch . ds L" "" . ds R" "" . ds C` "" . ds C' "" 'br\} .el\{\ . ds -- \|\(em\| . ds PI \(*p . ds L" `` . ds R" '' . ds C` . ds C' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is turned on, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .\" .\" Avoid warning from groff about undefined register 'F'. .de IX .. .nr rF 0 .if \n(.g .if rF .nr rF 1 .if (\n(rF:(\n(.g==0)) \{ . if \nF \{ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . if !\nF==2 \{ . nr % 0 . nr F 2 . \} . \} .\} .rr rF .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. . \" fudge factors for nroff and troff .if n \{\ . ds #H 0 . ds #V .8m . ds #F .3m . ds #[ \f1 . ds #] \fP .\} .if t \{\ . ds #H ((1u-(\\\\n(.fu%2u))*.13m) . ds #V .6m . ds #F 0 . ds #[ \& . ds #] \& .\} . \" simple accents for nroff and troff .if n \{\ . ds ' \& . ds ` \& . ds ^ \& . ds , \& . ds ~ ~ . ds / .\} .if t \{\ . ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" . ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' . ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' . ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' . ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' . ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' .\} . \" troff and (daisy-wheel) nroff accents .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' .ds 8 \h'\*(#H'\(*b\h'-\*(#H' .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] .ds ae a\h'-(\w'a'u*4/10)'e .ds Ae A\h'-(\w'A'u*4/10)'E . \" corrections for vroff .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' . \" for low resolution devices (crt and lpr) .if \n(.H>23 .if \n(.V>19 \ \{\ . ds : e . ds 8 ss . ds o a . ds d- d\h'-1'\(ga . ds D- D\h'-1'\(hy . ds th \o'bp' . ds Th \o'LP' . ds ae ae . ds Ae AE .\} .rm #[ #] #H #V #F C .\" ======================================================================== .\" .IX Title "CGI::HTML::Functions 3" .TH CGI::HTML::Functions 3 "2019-03-15" "perl v5.16.3" "User Contributed Perl Documentation" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" CGI::HTML::Functions \- Documentation for CGI.pm Legacy HTML Functionality .SH "SYNOPSIS" .IX Header "SYNOPSIS" Nothing here \- please do not use this functionality, it is considered to be legacy and essentially deprecated. This documentation exists solely to aid in maintenance and migration of legacy code using this functionality and you are strongly encouraged to migrate away from it. If you are working on new code you should be using a template engine. For more information see CGI::Alternatives. .PP If you really want to continue using the \s-1HTML\s0 generation functionality of \s-1CGI\s0.pm then you should take a look at HTML::Tiny instead, which may give you a migration path away from \s-1CGI\s0.pm's html generation functions; i strongly encourage you to move towards template driven page generation for anything involving markup as it will make porting your app to other frameworks much easier in the long run. .SH "DESCRIPTION" .IX Header "DESCRIPTION" The documentation here should be considered an addendum to the sections in the \&\s-1CGI\s0 documentation \- the sections here are named the same as those within the \&\s-1CGI\s0 perldoc. .SH "Calling CGI.pm routines" .IX Header "Calling CGI.pm routines" \&\s-1HTML\s0 tag functions have both attributes (the attribute=\*(L"value\*(R" pairs within the tag itself) and contents (the part between the opening and closing pairs). To distinguish between attributes and contents, \s-1CGI\s0.pm uses the convention of passing \s-1HTML\s0 attributes as a hash reference as the first argument, and the contents, if any, as any subsequent arguments. It works out like this: .PP .Vb 6 \& Code Generated HTML \& \-\-\-\- \-\-\-\-\-\-\-\-\-\-\-\-\-\- \& h1()

\& h1(\*(Aqsome\*(Aq,\*(Aqcontents\*(Aq);

some contents

\& h1({\-align=>left});

\& h1({\-align=>left},\*(Aqcontents\*(Aq);

contents

.Ve .PP Many newcomers to \s-1CGI\s0.pm are puzzled by the difference between the calling conventions for the \s-1HTML\s0 shortcuts, which require curly braces around the \s-1HTML\s0 tag attributes, and the calling conventions for other routines, which manage to generate attributes without the curly brackets. Don't be confused. As a convenience the curly braces are optional in all but the \s-1HTML\s0 shortcuts. If you like, you can use curly braces when calling any routine that takes named arguments. For example: .PP .Vb 1 \& print $q\->header( { \-type => \*(Aqimage/gif\*(Aq, \-expires => \*(Aq+3d\*(Aq } ); .Ve .PP If you use warnings, you will be warned that some \s-1CGI\s0.pm argument names conflict with built-in perl functions. The most frequent of these is the \&\-values argument, used to create multi-valued menus, radio button clusters and the like. To get around this warning, you have several choices: .IP "1." 4 Use another name for the argument, if one is available. For example, \-value is an alias for \-values. .IP "2." 4 Change the capitalization, e.g. \-Values .IP "3." 4 Put quotes around the argument name, e.g. '\-values' .SS "Function-oriented interface \s-1HTML\s0 exports" .IX Subsection "Function-oriented interface HTML exports" Here is a list of the \s-1HTML\s0 related function sets you can import: .IP "\fB:form\fR" 4 .IX Item ":form" Import all fill-out form generating methods, such as \fB\f(BItextfield()\fB\fR. .IP "\fB:html2\fR" 4 .IX Item ":html2" Import all methods that generate \s-1HTML 2.0\s0 standard elements. .IP "\fB:html3\fR" 4 .IX Item ":html3" Import all methods that generate \s-1HTML 3.0\s0 elements (such as , and ). .IP "\fB:html4\fR" 4 .IX Item ":html4" Import all methods that generate \s-1HTML 4\s0 elements (such as , and ). .IP "\fB:netscape\fR" 4 .IX Item ":netscape" Import the , and
tags. .IP "\fB:html\fR" 4 .IX Item ":html" Import all HTML-generating shortcuts (i.e. 'html2', 'html3', 'html4' and 'netscape') .IP "\fB:standard\fR" 4 .IX Item ":standard" Import \*(L"standard\*(R" features, 'html2', 'html3', 'html4', 'ssl', 'form' and 'cgi'. .PP If you import any of the state-maintaining \s-1CGI\s0 or form-generating methods, a default \s-1CGI\s0 object will be created and initialized automatically the first time you use any of the methods that require one to be present. This includes \&\fB\f(BIparam()\fB\fR, \fB\f(BItextfield()\fB\fR, \fB\f(BIsubmit()\fB\fR and the like. (If you need direct access to the \s-1CGI\s0 object, you can find it in the global variable \fB\f(CB$CGI::Q\fB\fR). .SS "Pragmas" .IX Subsection "Pragmas" Additional \s-1HTML\s0 generation related pragms: .IP "\-nosticky" 4 .IX Item "-nosticky" By default the \s-1CGI\s0 module implements a state-preserving behavior called \&\*(L"sticky\*(R" fields. The way this works is that if you are regenerating a form, the methods that generate the form field values will interrogate \fIparam()\fR to see if similarly-named parameters are present in the query string. If they find a like-named parameter, they will use it to set their default values. .Sp Sometimes this isn't what you want. The \fB\-nosticky\fR pragma prevents this behavior. You can also selectively change the sticky behavior in each element that you generate. .IP "\-tabindex" 4 .IX Item "-tabindex" Automatically add tab index attributes to each form field. With this option turned off, you can still add tab indexes manually by passing a \-tabindex option to each field-generating method. .IP "\-no_xhtml" 4 .IX Item "-no_xhtml" By default, \s-1CGI\s0.pm versions 2.69 and higher emit \s-1XHTML \&\s0(http://www.w3.org/TR/xhtml1/). The \-no_xhtml pragma disables this feature. Thanks to Michalis Kabrianis for this feature. .Sp If \fIstart_html()\fR's \-dtd parameter specifies an \s-1HTML 2.0, 3.2, 4.0\s0 or 4.01 \s-1DTD, XHTML\s0 will automatically be disabled without needing to use this pragma. .SS "Special forms for importing HTML-tag functions" .IX Subsection "Special forms for importing HTML-tag functions" Many of the methods generate \s-1HTML\s0 tags. As described below, tag functions automatically generate both the opening and closing tags. For example: .PP .Vb 1 \& print h1(\*(AqLevel 1 Header\*(Aq); .Ve .PP produces .PP .Vb 1 \&

Level 1 Header

.Ve .PP There will be some times when you want to produce the start and end tags yourself. In this case, you can use the form start_\fItag_name\fR and end_\fItag_name\fR, as in: .PP .Vb 1 \& print start_h1,\*(AqLevel 1 Header\*(Aq,end_h1; .Ve .SS "Creating the \s-1HTML\s0 document header" .IX Subsection "Creating the HTML document header" .Vb 10 \& print start_html( \& \-title => \*(AqSecrets of the Pyramids\*(Aq, \& \-author => \*(Aqfred@capricorn.org\*(Aq, \& \-base => \*(Aqtrue\*(Aq, \& \-target => \*(Aq_blank\*(Aq, \& \-meta => {\*(Aqkeywords\*(Aq=>\*(Aqpharaoh secret mummy\*(Aq, \& \*(Aqcopyright\*(Aq => \*(Aqcopyright 1996 King Tut\*(Aq}, \& \-style => {\*(Aqsrc\*(Aq=>\*(Aq/styles/style1.css\*(Aq}, \& \-BGCOLOR => \*(Aqblue\*(Aq \& ); .Ve .PP The \fIstart_html()\fR routine creates the top of the page, along with a lot of optional information that controls the page's appearance and behavior. .PP This method returns a canned \s-1HTML\s0 header and the opening tag. All parameters are optional. In the named parameter form, recognized parameters are \-title, \-author, \-base, \-xbase, \-dtd, \-lang and \-target (see below for the explanation). Any additional parameters you provide, such as the unofficial \&\s-1BGCOLOR\s0 attribute, are added to the tag. Additional parameters must be proceeded by a hyphen. .PP The argument \fB\-xbase\fR allows you to provide an \s-1HREF\s0 for the tag different from the current location, as in .PP .Vb 1 \& \-xbase => "http://home.mcom.com/" .Ve .PP All relative links will be interpreted relative to this tag. .PP The argument \fB\-target\fR allows you to provide a default target frame for all the links and fill-out forms on the page. \fBThis is a non-standard \s-1HTTP\s0 feature\fR \&\fBwhich only works with some browsers!\fR .PP .Vb 1 \& \-target => "answer_window" .Ve .PP All relative links will be interpreted relative to this tag. You add arbitrary meta information to the header with the \fB\-meta\fR argument. This argument expects a reference to a hash containing name/value pairs of meta information. These will be turned into a series of header tags that look something like this: .PP .Vb 2 \& \& .Ve .PP To create an HTTP-EQUIV type of tag, use \fB\-head\fR, described below. .PP The \fB\-style\fR argument is used to incorporate cascading stylesheets into your code. See the section on \s-1CASCADING STYLESHEETS\s0 for more information. .PP The \fB\-lang\fR argument is used to incorporate a language attribute into the tag. For example: .PP .Vb 1 \& print $q\->start_html( \-lang => \*(Aqfr\-CA\*(Aq ); .Ve .PP The default if not specified is \*(L"en-US\*(R" for \s-1US\s0 English, unless the \-dtd parameter specifies an \s-1HTML 2.0\s0 or 3.2 \s-1DTD,\s0 in which case the lang attribute is left off. You can force the lang attribute to left off in other cases by passing an empty string (\-lang=>''). .PP The \fB\-encoding\fR argument can be used to specify the character set for \s-1XHTML.\s0 It defaults to iso\-8859\-1 if not specified. .PP The \fB\-dtd\fR argument can be used to specify a public \s-1DTD\s0 identifier string. For example: .PP .Vb 1 \& \-dtd => \*(Aq\-//W3C//DTD HTML 4.01 Transitional//EN\*(Aq) .Ve .PP Alternatively, it can take public and system \s-1DTD\s0 identifiers as an array: .PP .Vb 4 \& \-dtd => [ \& \*(Aq\-//W3C//DTD HTML 4.01 Transitional//EN\*(Aq, \& \*(Aqhttp://www.w3.org/TR/html4/loose.dtd\*(Aq \& ] .Ve .PP For the public \s-1DTD\s0 identifier to be considered, it must be valid. Otherwise it will be replaced by the default \s-1DTD.\s0 If the public \s-1DTD\s0 contains '\s-1XHTML\s0', \s-1CGI\s0.pm will emit \s-1XML.\s0 .PP The \fB\-declare_xml\fR argument, when used in conjunction with \s-1XHTML,\s0 will put a declaration at the top of the \s-1HTML\s0 header. The sole purpose of this declaration is to declare the character set encoding. In the absence of \&\-declare_xml, the output \s-1HTML\s0 will contain a tag that specifies the encoding, allowing the \s-1HTML\s0 to pass most validators. The default for \-declare_xml is false. .PP You can place other arbitrary \s-1HTML\s0 elements to the section with the \&\fB\-head\fR tag. For example, to place a element in the head section, use this: .PP .Vb 6 \& print start_html( \& \-head => Link({ \& \-rel => \*(Aqshortcut icon\*(Aq, \& \-href => \*(Aqfavicon.ico\*(Aq \& }) \& ); .Ve .PP To incorporate multiple \s-1HTML\s0 elements into the section, just pass an array reference: .PP .Vb 12 \& print start_html( \& \-head => [ \& Link({ \& \-rel => \*(Aqnext\*(Aq, \& \-href => \*(Aqhttp://www.capricorn.com/s2.html\*(Aq \& }), \& Link({ \& \-rel => \*(Aqprevious\*(Aq, \& \-href => \*(Aqhttp://www.capricorn.com/s1.html\*(Aq \& }) \& ] \& ); .Ve .PP And here's how to create an HTTP-EQUIV tag: .PP .Vb 6 \& print start_html( \& \-head => meta({ \& \-http_equiv => \*(AqContent\-Type\*(Aq, \& \-content => \*(Aqtext/html\*(Aq \& }) \& ); .Ve .PP \&\s-1JAVASCRIPTING:\s0 The \fB\-script\fR, \fB\-noScript\fR, \fB\-onLoad\fR, \fB\-onMouseOver\fR, \&\fB\-onMouseOut\fR and \fB\-onUnload\fR parameters are used to add JavaScript calls to your pages. \fB\-script\fR should point to a block of text containing JavaScript function definitions. This block will be placed within a