PHP에서 x-imap4-modified-utf7 문자열을 UTF-8로 인코딩

TL;DR


imap_utf7_decode() 아니고 mb_convert_encoding() 에서 OK.

원래 x-imap4-modified-utf7이란?



어떤 것인가


x-imap4-modified-utf7 라는 문자 코드는, 나도 이 문제에 직면할 때까지는 묻지 않았었습니다…
조금 살펴 보면, 왜냐하면 기본 UTF-7이라는 것의 수정 버전이며, IMAP4를 사용하여 폴더 이름을 표시하기 위해 개선 된 것 같다?

어디에서 사용되는지



이 문제에 직면 한 것은 Thunderbird라는 메일 클라이언트 소프트웨어의 필터 설정입니다.
여기에는 어떤 폴더에 메일을 저장할까. 라는 정보를 가지는 부분이 있어, 이 폴더명의 encode에 사용되고 있었습니다.

PHP에서 사용



imap_utf7_decode()



조금 구그하면 PHP에는 imap_utf7_decode 라는 함수가 준비되어 있는 것을 알 수 있습니다.

수정 버전 UTF-7textISO-8859-1 문자열로 디코딩합니다.

그럼 UTF-8 로 사용하고 싶은 경우는, 다시 한번 ISO-8859-1 로부터 UTF-8 로 변환하지 않으면 안 되는 것일까.

우선 움직이는 테스트
echo imap_utf7_decode('actionValue="imap://hogehoge.com/INBOX/00-&MMYwuTDI-/&MGYwWTBo-"');

PHP Fatal error:  Call to undefined function imap_utf7_decode()

… … 엣.

mb_convert_encoding()



실은 이 x-imap4-modified-utf7 , mb_convert_encoding만으로도 변환이 가능했습니다!

조속히 시험하는 시험
echo mb_convert_encoding('actionValue="imap://hogehoge.com/INBOX/00-&MMYwuTDI-/&MGYwWTBo-"', 'utf8', 'utf7-imap');

'actionValue="imap://hogehoge.com/INBOX/00-テスト/てすと'

브라보 !!
imap_utf7_decode 하지만 undefined 라든지 말하고 나서 버전의 확인도 했지만 잘 모르겠다…
보통 mb_convert_encoding 로 인코딩이 되어 살아났습니다.

Thunderbird를 뭔가 사용하거나, 그 이외에도 폴더 이름 등을 다루는 것과 연계 할 때 필요할지도.
&MMYwuTDI- 」 이런 걸까 「 &MGYwWTBo- 」 이런 문자를 인코딩하게 되면 한번 이 기사를 기억해 보세요.

좋은 웹페이지 즐겨찾기