Computer >> 컴퓨터 >  >> 프로그래밍 >> PHP

PHP iconv_mime_decode_headers() 함수로 여러 MIME 헤더 필드를 한 번에 디코딩하는 방법

PHP에서 iconv_mime_decode_headers() 함수는 여러 개의 MIME 헤더 필드를 한 번에 디코딩할 때 사용하는 내장(built-in) 함수입니다. 이메일 헤더처럼 인코딩된 MIME 형식의 헤더 데이터를 사람이 읽을 수 있는 형태로 변환해 주기 때문에 메일 처리 로직을 구현할 때 유용하게 활용됩니다.

문법(Syntax)

iconv_mime_decode_headers($str_headers, $int_mode, $str_encoding)

매개변수(Parameter)

iconv_mime_decode_headers() 함수는 세 가지 매개변수인 $headers, $mode, $encoding을 받습니다.

  • $headers − 디코딩할 대상이 되는 인코딩된 헤더 문자열입니다. 문자열(string) 타입의 매개변수입니다.

  • $mode − iconv_mime_decode_headers() 함수가 잘못된 형식(deformed)의 MIME 헤더 필드를 만났을 때의 동작 방식을 결정합니다. 아래 비트마스크(bitmask) 값들을 조합하여 사용할 수 있습니다.

  • $encoding − 결과를 표현하는 데 사용할 문자셋(character set)을 지정하는 선택적(optional) 매개변수입니다. 이 값을 생략하거나 null로 지정하면 iconv.internal_encoding 설정값이 대신 사용됩니다.

iconv_mime_decode_headers()에서 허용되는 비트마스크 목록

  • ICONV_MIME_DECODE_STRICT − 이 옵션을 설정하면 주어진 헤더를 표준 규격에 완전히 맞춰 엄격하게 디코딩합니다. 다만 실제 환경에는 MIME 표준 요구 사항을 따르지 않고 올바른 MIME 헤더를 생성하지 않는 불완전한 메일 사용자 에이전트(mail user agent)가 많기 때문에, 이 옵션은 기본적으로 비활성화되어 있습니다.
  • ICONV_MIME_DECODE_CONTINUE_ON_ERROR − 이 옵션을 설정하면 문법 오류가 있어도 이를 무시하고 주어진 헤더의 나머지 부분을 계속해서 처리하려고 시도합니다.

반환 값(Return Value)

iconv_mime_decode_headers() 함수는 디코딩에 성공하면 headers 매개변수로 지정된 전체 MIME 헤더 필드 집합을 담고 있는 연관 배열(associative array)을 반환합니다. 반대로 디코딩 과정에서 오류가 발생하면 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>

출력 결과(Output)

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
        )
)

위 예제에서 볼 수 있듯이, heredoc 문법으로 정의한 원시 MIME 헤더 문자열이 iconv_mime_decode_headers() 함수를 통해 디코딩되며, Subject, To, Date, Message-Id, Received 등 각 헤더 필드를 키로 하는 연관 배열로 변환됩니다. 특히 Received처럼 동일한 이름의 헤더가 여러 번 등장하는 경우 배열 형태로 묶여 반환되는 점도 참고하면 좋습니다.