2008-09-22

받은 메일에서 보낸이,제목에 대한 디코딩

PHP에서 imap_fetch_overview 함수를 통해서 헤더를 가져와서 제목과 보낸이를 출력해보면 =?EUC-KR?B?udrB2Lq5?= 와 비슷한 형태로 출력되버린다. 이것을 정상적으로 출력하려면 2번의 디코딩 과정이 필요하다. 화면은 UTF-8로 되어 있다고 가정하자.

우선 이 문나열을 분석해보자. ?를 기준으로 해서 단어를 나누어 보면,

  1. =
  2. EUC-KR
  3. B
  4. udrB2Lq5
  5. =

로 나누어지는 것을 확인 할 수 있다.
여기에서 두번째 항목인 EUC-KR캐릭터셋을 의미한다.
또한, 세번째 항목인 BBase64 로 인코딩 되어 있음을 의미한다.
그리고, 네번째 항목인 udrB2Lq5실제내용 이다.

즉, 이것을 화면에 표시하려면, 우선 Base64로 디코딩을 한 후에, UTF-8로 캐릭터셋을 변경하면 된다.
base64로 디코딩할 수 있는 함수는 imap_base64() 이며,
캐릭터셋을 변경할수 있는 함수는 mb_convert_encodingiconv 가 있다.

최종적으로 간단하게 아래와 같은 코드로 정리할 수 있겠다.
mb_convert_encoding(imap_base64("udrB2Lq5"), "UTF-8", "EUC-KR");

관련글 : http://forums.mozilla.or.kr/viewtopic.php?f=3&t=1462

추가 :
PHP에는 아주 유용한 함수가 있군요.
imap_mime_header_decode 라는 함수가 알아서 변경해주는군요.
이제, 삽질할 필요 없겠습니다. 그래도, 캐릭터셋은 여전히 변경해주셔야 합니다. ^^

댓글 없음:

댓글 쓰기