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() 함수의 동작 방식을 제어할 수 있습니다.
지원되는 설정 항목
| 항목 | 타입 | 설명 | 기본값 | 예시 |
|---|---|---|---|---|
| scheme | string | 필드 값을 인코딩하는 방식을 지정합니다. B(base64) 또는 Q(quoted-printable) 인코딩 방식을 사용할 수 있습니다. | — | — |
| input-charset | string | $field_name과 $field_value 매개변수의 문자셋을 지정합니다. 지정하지 않으면 iconv.internal_charset ini 설정값이 사용됩니다. | iconv.internal_charset | ISO-8859-1 |
| output-charset | string | MIME 헤더를 구성할 때 사용할 문자셋을 지정합니다. 지정하지 않으면 input-charset 값이 사용됩니다. | input-charset 값 | UTF-8 |
| line-length | integer | 헤더 라인의 최대 길이를 지정합니다. | 76 | 996 |
| line-break-chars | string | 긴 헤더 필드를 접을(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 표준에 맞게 긴 헤더 라인을 적절히 접어 처리할 수 있습니다.