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

PHP iconv_mime_encode() 함수로 MIME 헤더 필드 작성하기

PHP에서 iconv_mime_encode() 함수는 유효한 MIME 헤더 필드를 구성(작성)하는 데 사용되는 내장 함수입니다. 이메일 헤더에 한글이나 특수문자 등 비 ASCII 문자를 포함해야 할 때 특히 유용하게 활용됩니다.

문법

string iconv_mime_encode(string $field_name, string $field_value, array $options=[])

iconv_mime_encode() 함수는 유효한 MIME 헤더 필드를 나타내는 문자열을 구성하여 반환합니다. 반환 결과는 다음과 같은 형태입니다.

Subject: =ISO-8859-1?Q?Pr=FCfung_f=FFCr?= Entwerfen von einer MIME kopfzeile

참고: 위 예제에서 Subject는 필드 이름(field name)에 해당하며, "=ISO-8859-1?..."로 시작하는 부분이 필드 값(field value)입니다.

매개변수

iconv_mime_encode() 함수는 세 가지 매개변수를 받습니다.

  • $field_name — 헤더 필드의 이름을 지정합니다.
  • $field_value — 헤더 필드의 값을 지정합니다.
  • $options — 선택적 매개변수로, 설정 항목들을 담은 연관 배열을 전달하여 iconv_mime_encode() 함수의 동작 방식을 제어할 수 있습니다.

지원되는 설정 항목

항목타입설명기본값예시
schemestring필드 값을 인코딩하는 방식을 지정합니다. B(base64) 또는 Q(quoted-printable) 인코딩 방식을 사용할 수 있습니다.
input-charsetstring$field_name과 $field_value 매개변수의 문자셋을 지정합니다. 지정하지 않으면 iconv.internal_charset ini 설정값이 사용됩니다.iconv.internal_charsetISO-8859-1
output-charsetstringMIME 헤더를 구성할 때 사용할 문자셋을 지정합니다. 지정하지 않으면 input-charset 값이 사용됩니다.input-charset 값UTF-8
line-lengthinteger헤더 라인의 최대 길이를 지정합니다.76996
line-break-charsstring긴 헤더 필드를 접을(folding) 때 각 줄 끝에 추가할 EOL 문자 시퀀스를 지정합니다. 지정하지 않으면 "\r\n"(CR LF)이 기본값으로 사용됩니다.\r\n\n

예제 1 — Q(quoted-printable) 인코딩 방식 사용

<?php
    // iconv_mime_encode()가 지원하는 설정 항목 사용
    $options = array(
        "input-charset" => "ISO-8859-2",
        "output-charset" => "UTF-8",
        "line-length" => 76,
        "line-break-chars" => "\n"
    );
    // Q quoted-printable 인코딩 방식 사용
    $options["scheme"] = "Q";

    // 아래 코드는 다음과 같은 결과를 출력합니다.
    // "Subject: =?UTF-8?Q?Pr=C3=BCfung=20Pr=C3=BCfung?="
    echo iconv_mime_encode("Subject", "Prüfung Prüfung", $options);
?>

출력 결과

Subject: =?UTF-8?Q?Pr=C3=83=C2=BCfung=20Pr=C3=83=C2=BCfung?=

예제 2 — B(base64) 인코딩 방식 사용

<?php
    // iconv_mime_encode()가 지원하는 설정 항목 사용
    $options = array(
        "input-charset" => "ISO-8859-1",
        "output-charset" => "UTF-8",
        "line-length" => 76,
        "line-break-chars" => "\n"
    );

    // B base64 인코딩 방식 사용
    $options["scheme"] = "B";

    // 아래 코드는 다음과 같은 결과를 출력합니다.
    // "Subject: =?UTF-8?B?UHJlw4PCp29zIE9sw4PCoC50eHQ=?="
    echo iconv_mime_encode("Subject", "Preços Olà.txt", $options);
?>

출력 결과

Subject: =?UTF-8?B?UHJlw4PCp29zIE9sw4PCoC50eHQ=?=

정리

iconv_mime_encode() 함수는 이메일 MIME 헤더에서 비 ASCII 문자를 안전하게 표현할 수 있도록 도와주는 강력한 도구입니다. scheme 옵션을 통해 base64(B) 또는 quoted-printable(Q) 방식 중 하나를 선택할 수 있으며, input-charset과 output-charset 옵션으로 입출력 문자셋을 자유롭게 변환할 수 있습니다. line-length와 line-break-chars 옵션을 활용하면 RFC 표준에 맞게 긴 헤더 라인을 적절히 접어 처리할 수 있습니다.