http::headers::util(3)

NAME

HTTP::Headers::Util - Header value parsing utility func
tions

SYNOPSIS

use HTTP::Headers::Util qw(split_header_words);
@values    =     split_header_words($h->header("ContentType"));

DESCRIPTION

This module provides a few functions that helps parsing
and construction of valid HTTP header values. None of the
functions are exported by default.

The following functions are available:

split_header_words( @header_values )
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 ";".
If the @header_values passed as argument contains mul
tiple values, then they are treated as if they were a
single value separated by comma ",".
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).

headers = #header
header = (token | parameter) *( [";"]
(token | parameter))
token = 1*<any CHAR except CTLs or sepa
rators>
separators = "(" | ")" | "<" | ">" | "@"
| "," | ";" | ":" | "
| "/" | "[" | "]" | "?" | "="
| "{" | "}" | SP | HT
quoted-string = ( <"> *(qdtext | quoted-pair )
<"> )
qdtext = <any TEXT except <">>
quoted-pair = "
parameter = attribute "=" value
attribute = token
value = token | quoted-string
Each header is represented by an anonymous array of
key/value pairs. The value for a simple token (not
part of a parameter) is "undef". Syntactically incor
rect headers will not necessary be parsed as you would
want.
This is easier to describe with some examples:

split_header_words('foo="bar"; port="80,81"; dis
card, bar=baz')
split_header_words('text/html;
charset="iso-8859-1");
split_header_words('Basic realm="
will return

[foo=>'bar', port=>'80,81', disrard=> undef],
[bar=>'baz' ]
['text/html' => undef, charset "> 'iso-8859-1']
[Basic => undef, realm => '"foo'
]
join_header_words( @arrays )
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.
Example:

join_header_words(["text/plain" => undef, charset
=> "iso-8859/1"]);
join_header_words("text/plain" => undef, charset =>
"iso-8859/1");
will both return the string:

text/plain; charset="iso-8859/1"

COPYRIGHT

Copyright 1997-1998, Gisle Aas

This library is free software; you can redistribute it
and/or modify it under the same terms as Perl itself.
Copyright © 2010-2025 Platon Technologies, s.r.o.           Home | Man pages | tLDP | Documents | Utilities | About
Design by styleshout