踊る犬.netブログ (旧)

[PHP]IMAPでメールの文字コード判定を行うには

なぜかimap_headerinfo()の戻り値にはContent-Typeが含まれないので、
直に取得する力技で解決。

When you try to get charset of a mail on IMAP, imap_headerinfo() doesn’t include ‘Content-Type’ in the return value.
Below is a function to get type of charset from a mail header directly by calling imap_fetchheader.


<?

/**

@context IMAPハンドル

@number  メールのID

@defcharset 失敗した時に返すデフォルトの文字セット名

@return 文字セット名

*/

function imap_getcharset($context, $number, $defcharset = "iso-2022-jp")

{

    

    // Get charset

    $h = imap_fetchheader($context, $number);

    $mc = preg_match("/charsets*=s*(.+?)[;n]/s", $h, $m);

    $charset = $m[1] ? strtolower(trim($m[1])) : $defcharset;

    

}

?>