728x90
반응형
PHP에서 imap_fetch_overview 함수를 통해서 헤더를 가져와서 제목과 보낸이를 출력해보면 =?EUC-KR?B?udrB2Lq5?= 와 비슷한 형태로 출력되버린다. 이것을 정상적으로 출력하려면 2번의 디코딩 과정이 필요하다. 화면은 UTF-8로 되어 있다고 가정하자.
우선 이 문나열을 분석해보자. ?를 기준으로 해서 단어를 나누어 보면,
=
EUC-KR
B
udrB2Lq5
=
로 나누어지는 것을 확인 할 수 있다.
여기에서 두번째 항목인 EUC-KR 은 캐릭터셋을 의미한다.
또한, 세번째 항목인 B 는 Base64 로 인코딩 되어 있음을 의미한다.
그리고, 네번째 항목인 udrB2Lq5 이 실제내용 이다.
즉, 이것을 화면에 표시하려면, 우선 Base64로 디코딩을 한 후에, UTF-8로 캐릭터셋을 변경하면 된다.
base64로 디코딩할 수 있는 함수는 imap_base64() 이며,
캐릭터셋을 변경할수 있는 함수는 mb_convert_encoding 과 iconv 가 있다.
최종적으로 간단하게 아래와 같은 코드로 정리할 수 있겠다.
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 라는 함수가 알아서 변경해줍니다.
이제, 삽질할 필요 없겠습니다. 그래도, 캐릭터셋은 여전히 변경해주셔야 합니다. ^^
728x90
반응형
'프로그래밍' 카테고리의 다른 글
(Ruby) Install Apache 2.2 + Passenger + PostgreSQL (0) | 2009.03.03 |
---|---|
(PHP) 메일박스 이동... (0) | 2008.10.29 |
(PHP) imap_open 실행시 느리게 연결되는 현상 해결 (0) | 2008.10.10 |
(PHP) IMAP 에서 메일목록 가져오기 (0) | 2008.09.30 |
(C++) ResEdit - Windows Resource Editor (0) | 2007.12.22 |