PHP
 Computer >> コンピューター >  >> プログラミング >> PHP

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など)が複数存在する場合は、配列としてまとめて返される点にも注目してください。

  1. PHPのheader()関数とは?使い方とパラメータを解説

    PHPのheader()関数は、クライアント(ブラウザなど)に対して生のHTTPヘッダーを送信するための関数です。コンテンツの種類の指定、リダイレクト、ファイルのダウンロード処理など、HTTP通信の制御において重要な役割を果たします。 基本構文 header(string, replace, resp_code) パラメータ string − 送信するヘッダー文字列を指定します。例:「Content-type:application/pdf」など。 replace − 省略可能なパラメータです。同じ種類のヘッダーが既に存在する場合に、それを置き換えるか(true)、2つ目のヘッダーとして追加

  2. PythonでMIME quoted-printableデータをエンコード・デコードする方法

    メールやテキストデータを扱っていると、必ずしも通常のASCII文字だけではないデータに遭遇することがあります。例えば、英語以外の言語で書かれたメールがその代表例です。Pythonには、こうした特殊な文字を扱うための仕組みとして、MIME(Multipurpose Internet Mail Extensions)に基づいたモジュールが用意されています。本記事では、メール本文や単純な文字列入力に含まれるそうした文字を、エンコード・デコードする方法を解説します。 emailパッケージを使用する方法 Python標準ライブラリのemailパッケージには、mimeモジュールとcharsetモジュールが