PHP로 ISO-2022-JP라는 문자 코드가 포함된 모델 종속 메시지 보내기

5313 단어 PHP어지럽다
PHP 파일은 UTF-8이지만, 메일을 ISO-2022-JP로 보내려다 난자 문제가 생겨서 메모를 공개합니다.
이번에 반한 이유는 함수mb_encode_mimeheader 때문이다.
수첩에서 말한 바와 같이 함수mb_encode_mimeheader를 사용할 때의 첫 번째 함수는
인코딩할 문자열.mb_internal_encoding()와 같은 인코딩을 해야 합니다.
http://php.net/manual/ja/function.mb-encode-mimeheader.php
따라서 파일 내 설정을 한 번mb_internal_encoding 함수로 UTF-8에서 ISO-2022-JP로 일시적으로 변환해야 합니다.
이 규격을 모르고 난타 현상에 빠졌다

샘플 코드


SendMail.php(UTF-8)
<?php
/*
 * このコードの文字コード・言語の設定を取得
 */
$original_encoding = mb_internal_encoding();
$original_language = mb_language();


/*
 * メール送信処理開始
 */
mb_language( 'Japanese' );
mb_internal_encoding("ISO-2022-JP-MS"); // ここからISO-2022-JP-MS

$to       = mb_encode_mimeheader(mb_convert_encoding("㈱イーグルジャンプ","ISO-2022-JP-MS",$original_encoding), 'ISO-2022-JP-MS')." <[email protected]>";
$subject  = mb_encode_mimeheader(mb_convert_encoding("進捗どうですか♪","ISO-2022-JP-MS",$original_encoding), 'ISO-2022-JP-MS');

$body     = mb_convert_encoding("進捗だめです( ^ω^)", 'ISO-2022-JP-MS',$original_encoding);

$headers  = "From: ".mb_encode_mimeheader(mb_convert_encoding("おじさん","ISO-2022-JP-MS"))." <[email protected]> \n";
$headers .= "Content-Type: text/plain; charset=ISO-2022-JP\n";

$params   = "-f [email protected]";


if(mail($to, $subject,$body, $headers,$params)){
    echo "Success!";
}else{

    echo "Fail!";
}

/*
 * 文字コード・言語設定を元に戻す
 */
mb_internal_encoding( $original_encoding );
mb_language( $original_language );

마지막으로 문자 코드, 언어 설정을 원상태로 복구하는 것을 잊지 마세요~
그리고 메일 클라이언트가 브라우저에서 Gmail이나 Thunderbird일 경우 문자 코드의 설정이 달콤해도 자동으로 바뀌지만 조금 오래된 메일 클라이언트일 경우 코드가 흐트러질 때가 많으니 주의하세요.

좋은 웹페이지 즐겨찾기