PHPのiconv_mime_decode_headers()関数で複数のMIMEヘッダーを一括デコードする方法
PHPには、複数のMIMEヘッダーフィールドを一度にデコードできる組み込み関数 iconv_mime_decode_headers() が用意されています。メールヘッダーなど、エンコードされたMIMEヘッダーをまとめて処理したい場合に非常に便利な関数です。
構文
iconv_mime_decode_headers($str_headers, $int_mode, $str_encoding)
パラメータ
iconv_mime_decode_headers() 関数は、以下の3つのパラメータを受け取ります。$headers、$mode、$encoding の3つです。
- $headers − エンコードされたヘッダーを指定するためのパラメータです。文字列型で渡します。
- $mode − iconv_mime_decode_headers() が不正な形式(壊れた)MIMEヘッダーフィールドに遭遇した場合の動作を決定するパラメータです。後述のビットマスクを任意に組み合わせて指定できます。
iconv_mime_decode_headers() で使用可能なビットマスク一覧
- ICONV_MIME_DECODE_STRICT
- ICONV_MIME_DECODE_CONTINUE_ON_ERROR
- ICONV_MIME_DECODE_STRICT − このフラグが設定されている場合、与えられたヘッダーはRFCに完全準拠した形でデコードされます。ただし、正しいMIMEヘッダーを生成しない問題のあるメールユーザーエージェント(MUA)が多いため、このオプションはデフォルトでは無効になっています。
- ICONV_MIME_DECODE_CONTINUE_ON_ERROR − このフラグが設定されている場合、文法上のエラーを無視しようとし、エラーがあっても処理を続行します。
- $encoding − 省略可能なパラメータで、結果を表現するための文字セットを指定します。省略した場合、または null を指定した場合は iconv.internal_encoding の設定値が使用されます。
戻り値
iconv_mime_decode_headers() 関数は、成功した場合にヘッダーで指定されたMIMEヘッダーフィールド全体を格納した連想配列を返します。デコード中に何らかのエラーが発生した場合は False を返します。
使用例1
<pre>
<?php
$str_headers = <<<EOF
Subject: =?UTF-8?B?UHLDvGZ1bmcgUHLDvGZ1bmc=?=
To: xyz@example.com
Date: Mon, 21 Jun 2021 00:00:00 +0000
Message-Id: <xyz@example.com>
Received: from localhost (localhost [127.0.0.1]) by localhost
with SMTP id xyz for <xyz@example.com>;
Mon, 21 Jun 2021 00:00:00 +0000 (UTC)
(envelope-from example-return-0000-xyz=xyz.com@example.com)
Received: (qmail 0 invoked by uid 65534); 21 Mon 2005 00:00:00 +0000
EOF;
$headers = iconv_mime_decode_headers($str_headers, 0, "ISO-8859-1");
print_r($headers);
?>
</pre>出力結果
Array
(
[Subject] => Prfung Prfung
[To] => xyz@example.com
[Date] => Mon, 21 Jun 2021 00:00:00 +0000
[Message-Id] =>
[Received] => Array
(
[0] => from localhost (localhost [127.0.0.1]) by localhost with SMTP id xyz for ; Mon, 21 Jun 2021 00:00:00 +0000 (UTC) (envelope-from example-return-0000-xyz=xyz.com@example.com)
[1] => (qmail 0 invoked by uid 65534); 21 Mon 2005 00:00:00 +0000
)
)この例では、SubjectヘッダーのBase64エンコードされた文字列がデコードされ、ToやDateなどの各ヘッダーも連想配列として取得できていることがわかります。同じ名前のヘッダー(Receivedなど)が複数存在する場合は、配列としてまとめて返される点にも注目してください。
-
PHPのheader()関数とは?使い方とパラメータを解説
PHPのheader()関数は、クライアント(ブラウザなど)に対して生のHTTPヘッダーを送信するための関数です。コンテンツの種類の指定、リダイレクト、ファイルのダウンロード処理など、HTTP通信の制御において重要な役割を果たします。 基本構文 header(string, replace, resp_code) パラメータ string − 送信するヘッダー文字列を指定します。例:「Content-type:application/pdf」など。 replace − 省略可能なパラメータです。同じ種類のヘッダーが既に存在する場合に、それを置き換えるか(true)、2つ目のヘッダーとして追加
-
PythonでMIME quoted-printableデータをエンコード・デコードする方法
メールやテキストデータを扱っていると、必ずしも通常のASCII文字だけではないデータに遭遇することがあります。例えば、英語以外の言語で書かれたメールがその代表例です。Pythonには、こうした特殊な文字を扱うための仕組みとして、MIME(Multipurpose Internet Mail Extensions)に基づいたモジュールが用意されています。本記事では、メール本文や単純な文字列入力に含まれるそうした文字を、エンコード・デコードする方法を解説します。 emailパッケージを使用する方法 Python標準ライブラリのemailパッケージには、mimeモジュールとcharsetモジュールが