📄 util.html
字号:
<?xml version="1.0" ?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<!-- saved from url=(0017)http://localhost/ -->
<script language="JavaScript" src="../../../displayToc.js"></script>
<script language="JavaScript" src="../../../tocParas.js"></script>
<script language="JavaScript" src="../../../tocTab.js"></script>
<link rel="stylesheet" type="text/css" href="../../../scineplex.css">
<title>HTTP::Headers::Util - Header value parsing utility functions</title>
<link rel="stylesheet" href="../../../Active.css" type="text/css" />
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<link rev="made" href="mailto:" />
</head>
<body>
<script>writelinks('__top__',3);</script>
<h1><a>HTTP::Headers::Util - Header value parsing utility functions</a></h1>
<p><a name="__index__"></a></p>
<!-- INDEX BEGIN -->
<ul>
<li><a href="#name">NAME</a></li>
<li><a href="#synopsis">SYNOPSIS</a></li>
<li><a href="#description">DESCRIPTION</a></li>
<li><a href="#copyright">COPYRIGHT</a></li>
</ul>
<!-- INDEX END -->
<hr />
<p>
</p>
<h1><a name="name">NAME</a></h1>
<p>HTTP::Headers::Util - Header value parsing utility functions</p>
<p>
</p>
<hr />
<h1><a name="synopsis">SYNOPSIS</a></h1>
<pre>
<span class="keyword">use</span> <span class="variable">HTTP::Headers::Util</span> <span class="string">qw(split_header_words)</span><span class="operator">;</span>
<span class="variable">@values</span> <span class="operator">=</span> <span class="variable">split_header_words</span><span class="operator">(</span><span class="variable">$h</span><span class="operator">-></span><span class="variable">header</span><span class="operator">(</span><span class="string">"Content-Type"</span><span class="operator">));</span>
</pre>
<p>
</p>
<hr />
<h1><a name="description">DESCRIPTION</a></h1>
<p>This module provides a few functions that helps parsing and
construction of valid HTTP header values. None of the functions are
exported by default.</p>
<p>The following functions are available:</p>
<dl>
<dt><strong><a name="item_split_header_words">split_header_words( @header_values )</a></strong>
<dd>
<p>This function will parse the header values given as argument into a
list of anonymous arrays containing key/value pairs. The function
knows how to deal with ",", ";" and "=" as well as quoted values after
"=". A list of space separated tokens are parsed as if they were
separated by ";".</p>
</dd>
<dd>
<p>If the @header_values passed as argument contains multiple values,
then they are treated as if they were a single value separated by
comma ",".</p>
</dd>
<dd>
<p>This means that this function is useful for parsing header fields that
follow this syntax (BNF as from the HTTP/1.1 specification, but we relax
the requirement for tokens).</p>
</dd>
<dd>
<pre>
<span class="variable">headers</span> <span class="operator">=</span> <span class="comment">#header</span>
<span class="variable">header</span> <span class="operator">=</span> <span class="operator">(</span><span class="variable">token</span> <span class="operator">|</span> <span class="variable">parameter</span><span class="operator">)</span> <span class="operator">*(</span> <span class="operator">[</span><span class="string">";"</span><span class="operator">]</span> <span class="operator">(</span><span class="variable">token</span> <span class="operator">|</span> <span class="variable">parameter</span><span class="operator">))</span>
</pre>
</dd>
<dd>
<pre>
<span class="variable">token</span> <span class="operator">=</span> <span class="number">1</span><span class="operator">*<</span><span class="variable">any</span> <span class="variable">CHAR</span> <span class="variable">except</span> <span class="variable">CTLs</span> <span class="keyword">or</span> <span class="variable">separators</span><span class="operator">></span>
<span class="variable">separators</span> <span class="operator">=</span> <span class="string">"("</span> <span class="operator">|</span> <span class="string">")"</span> <span class="operator">|</span> <span class="string">"<"</span> <span class="operator">|</span> <span class="string">">"</span> <span class="operator">|</span> <span class="string">"@"</span>
<span class="operator">|</span> <span class="string">","</span> <span class="operator">|</span> <span class="string">";"</span> <span class="operator">|</span> <span class="string">":"</span> <span class="operator">|</span> <span class="string">"\" | <"</span><span class="operator">></span>
<span class="operator">|</span> <span class="string">"/"</span> <span class="operator">|</span> <span class="string">"["</span> <span class="operator">|</span> <span class="string">"]"</span> <span class="operator">|</span> <span class="string">"?"</span> <span class="operator">|</span> <span class="string">"="</span>
<span class="operator">|</span> <span class="string">"{"</span> <span class="operator">|</span> <span class="string">"}"</span> <span class="operator">|</span> <span class="variable">SP</span> <span class="operator">|</span> <span class="variable">HT</span>
</pre>
</dd>
<dd>
<pre>
quoted-string = ( <"> *(qdtext | quoted-pair ) <"> )
qdtext = <any TEXT except <">>
quoted-pair = "\" CHAR</pre>
</dd>
<dd>
<pre>
parameter = attribute "=" value
attribute = token
value = token | quoted-string</pre>
</dd>
<dd>
<p>Each <em>header</em> is represented by an anonymous array of key/value
pairs. The value for a simple token (not part of a parameter) is <a href="../../../lib/Pod/perlfunc.html#item_undef"><code>undef</code></a>.
Syntactically incorrect headers will not necessary be parsed as you
would want.</p>
</dd>
<dd>
<p>This is easier to describe with some examples:</p>
</dd>
<dd>
<pre>
<span class="variable">split_header_words</span><span class="operator">(</span><span class="string">'foo="bar"; port="80,81"; discard, bar=baz'</span><span class="operator">);</span>
<span class="variable">split_header_words</span><span class="operator">(</span><span class="string">'text/html; charset="iso-8859-1"'</span><span class="operator">);</span>
<span class="variable">split_header_words</span><span class="operator">(</span><span class="string">'Basic realm="\\"foo\\\\bar\\""'</span><span class="operator">);</span>
</pre>
</dd>
<dd>
<p>will return</p>
</dd>
<dd>
<pre>
[foo=>'bar', port=>'80,81', discard=> undef], [bar=>'baz' ]
['text/html' => undef, charset => 'iso-8859-1']
[Basic => undef, realm => "\"foo\\bar\""]</pre>
</dd>
</li>
<dt><strong><a name="item_join_header_words">join_header_words( @arrays )</a></strong>
<dd>
<p>This will do the opposite of the conversion done by split_header_words().
It takes a list of anonymous arrays as arguments (or a list of
key/value pairs) and produces a single header value. Attribute values
are quoted if needed.</p>
</dd>
<dd>
<p>Example:</p>
</dd>
<dd>
<pre>
<span class="variable">join_header_words</span><span class="operator">(</span><span class="operator">[</span><span class="string">"text/plain"</span> <span class="operator">=></span> <span class="keyword">undef</span><span class="operator">,</span> <span class="string">charset</span> <span class="operator">=></span> <span class="string">"iso-8859/1"</span><span class="operator">]</span><span class="operator">);</span>
<span class="variable">join_header_words</span><span class="operator">(</span><span class="string">"text/plain"</span> <span class="operator">=></span> <span class="keyword">undef</span><span class="operator">,</span> <span class="string">charset</span> <span class="operator">=></span> <span class="string">"iso-8859/1"</span><span class="operator">);</span>
</pre>
</dd>
<dd>
<p>will both return the string:</p>
</dd>
<dd>
<pre>
<span class="variable">text</span><span class="operator">/</span><span class="variable">plain</span><span class="operator">;</span> <span class="variable">charset</span><span class="operator">=</span><span class="string">"iso-8859/1"</span>
</pre>
</dd>
</li>
</dl>
<p>
</p>
<hr />
<h1><a name="copyright">COPYRIGHT</a></h1>
<p>Copyright 1997-1998, Gisle Aas</p>
<p>This library is free software; you can redistribute it and/or
modify it under the same terms as Perl itself.</p>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -