Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages


home | help
MIME::Words(3)	      User Contributed Perl Documentation	MIME::Words(3)

       MIME::Words - deal with RFC 2047	encoded	words

       Before reading further, you should see MIME::Tools to make sure that
       you understand where this module	fits into the grand scheme of things.
       Go on, do it now.  I'll wait.

       Ready?  Ok...

	   use MIME::Words qw(:all);

	   ### Decode the string into another string, forgetting the charsets:
	   $decoded = decode_mimewords(
		 'To: =?ISO-8859-1?Q?Keld_J=F8rn_Simonsen?= <>',

	   ### Split string into array of decoded [DATA,CHARSET] pairs:
	   @decoded = decode_mimewords(
		 'To: =?ISO-8859-1?Q?Keld_J=F8rn_Simonsen?= <>',

	   ### Encode a	single unsafe word:
	   $encoded = encode_mimeword("\xABFran\xE7ois\xBB");

	   ### Encode a	string,	trying to find the unsafe words	inside it:
	   $encoded = encode_mimewords("Me and \xABFran\xE7ois\xBB in town");

       Fellow Americans, you probably won't know what the hell this module is
       for.  Europeans,	Russians, et al, you probably do.  ":-)".

       For example, here's a valid MIME	header you might get:

	     From: =?US-ASCII?Q?Keith_Moore?= <>
	     To: =?ISO-8859-1?Q?Keld_J=F8rn_Simonsen?= <>
	     CC: =?ISO-8859-1?Q?Andr=E9_?= Pirard <>
	     Subject: =?ISO-8859-1?B?SWYgeW91IGNhbiByZWFkIHRoaXMgeW8=?=

       The fields basically decode to (sorry, I	can only approximate the Latin
       characters with 7 bit sequences /o and 'e):

	     From: Keith Moore <>
	     To: Keld J/orn Simonsen <>
	     CC: Andr'e	 Pirard	<>
	     Subject: If you can read this you understand the example... cool!

       decode_mimewords	ENCODED
	   Function.  Go through the string looking for	RFC 2047-style "Q"
	   (quoted-printable, sort of) or "B" (base64) encoding, and decode

	   In an array context,	splits the ENCODED string into a list of
	   decoded "[DATA, CHARSET]" pairs, and	returns	that list.  Unencoded
	   data	are returned in	a 1-element array "[DATA]", giving an
	   effective CHARSET of	"undef".

	       $enc = '=?ISO-8859-1?Q?Keld_J=F8rn_Simonsen?= <>';
	       foreach (decode_mimewords($enc))	{
		   print "", ($_->[1] || 'US-ASCII'), ": ", $_->[0], "\n";

	   In a	scalar context,	joins the "data" elements of the above list
	   together, and returns that.	Warning: this is information-lossy,
	   and probably	not what you want, but if you know that	all charsets
	   in the ENCODED string are identical,	it might be useful to you.
	   (Before you use this, please	see "unmime" in	MIME::WordDecoder,
	   which is probably what you want.)

	   In the event	of a syntax error, $@ will be set to a description of
	   the error, but parsing will continue	as best	as possible (so	as to
	   get something back when decoding headers).  $@ will be false	if no
	   error was detected.

	   Any arguments past the ENCODED string are taken to define a hash of

       encode_mimeword RAW, [ENCODING],	[CHARSET]
	   Function.  Encode a single RAW "word" that has unsafe characters.
	   The "word" will be encoded in its entirety.

	       ### Encode "<<Franc,ois>>":
	       $encoded	= encode_mimeword("\xABFran\xE7ois\xBB");

	   You may specify the ENCODING	("Q" or	"B"), which defaults to	"Q".
	   You may specify the CHARSET,	which defaults to "iso-8859-1".

       encode_mimewords	RAW, [OPTS]
	   Function.  Given a RAW string, try to find and encode all "unsafe"
	   sequences of	characters:

	       ### Encode a string with	some unsafe "words":
	       $encoded	= encode_mimewords("Me and \xABFran\xE7ois\xBB");

	   Returns the encoded string.	Any arguments past the RAW string are
	   taken to define a hash of options:

	       Encode all unsafe stuff with this charset.  Default is
	       'ISO-8859-1', a.k.a. "Latin-1".

	       The encoding to use, "q"	or "b".	 The default is	"q".

	   Warning: this is a quick-and-dirty solution,	intended for character
	   sets	which overlap ASCII.  It does not comply with the RFC 2047
	   rules regarding the use of encoded words in message headers.	 You
	   may want to roll your own variant, using "encode_mimeword()", for
	   your	application.  Thanks to	Jan Kasprzak for reminding me about
	   this	problem.

       MIME::Base64, MIME::QuotedPrint,	MIME::Tools

       For other implementations of this or similar functionality
       (particularly, ones with	proper UTF8 support), see:

       Encode::MIME::Header, MIME::EncWords, MIME::AltWords

       At some future point, one of these implementations will likely replace
       MIME::Words and MIME::Words will	become deprecated.

       Exports its principle functions by default, in keeping with
       MIME::Base64 and	MIME::QuotedPrint.

       Eryq (, ZeeGee Software Inc (
       Dianne Skoll (

       All rights reserved.  This program is free software; you	can
       redistribute it and/or modify it	under the same terms as	Perl itself.

       Thanks also to...

	     Kent Boortz	For providing the idea,	and the	baseline
				RFC-1522-decoding code!
	     KJJ at PrimeNet	For requesting that this be split into
				its own	module.
	     Stephane Barizien	For reporting a	nasty bug.

perl v5.32.0			  2017-04-05			MIME::Words(3)


Want to link to this manual page? Use this URL:

home | help