2017-11-16 12 views
0

Outlook에서 이메일의 제목 줄을 사용하여 내용을 게시 할 수있는 웹 사이트가 있습니다. PHP와 imap을 사용하여 텍스트의 제목 줄을 얻고이를 mysql db에 저장합니다. 그러나 때때로, 누군가는 웹 사이트의 텍스트를 그 이메일의 제목 줄로 복사 할 것이고, 나는 왜곡 된 텍스트를 얻을 것이다. 이와 유사 :imap 제목 줄에있는 Windows-1252 문자를 UTF-8로 디코딩

=? Windows-1252? Q_Every_day_in_our_offices_we_recycle_cardboard, 알루미늄? = =? Windows-1252? ? = 96_won = 92t_you_join_us = 3 층 =

내가 무슨 짓을했는지하는 것은 다음과 같은 코드를 사용하여 페이지에 정상 표시됩니다 있도록이 텍스트를 해독하려고입니다 : 내가 제거 완료되면

$subject = strip_tags($mailHeader->subject); 
$header = imap_mime_header_decode($subject); 
$subject = ""; 
for($i=0;$i<count($header);$i++) 
{ 
    $subject .= $header[$i]->text; 
} 

을 대부분의 깨진 텍스트가 있지만 원래 제목 줄 텍스트에 있던 em 대시와 둥근 따옴표 대신에 대체 문자가 남습니다. 아래의 결과를보십시오 :

우리 사무실에서 우리는 매일 골판지, 알루미늄을 재활용합니다. 우리와 함께 하시겠습니까?

웹 사이트의 문자 집합이 UTF-8로 설정되어 있습니다. 웹 사이트 문자 세트를 ISO-8859-1로 설정하면 대체 문자가 둥근 따옴표로 바뀝니다. 대시이지만 UTF-8로 웹 사이트의 문자 세트를 남기고 싶습니다.

charset을 ISO-8859-1로 변경하지 않고 대체 문자를 제거하는 방법에 대한 도움이 될 것입니다. 감사.

답변

0

imap_mime_header_decode에 의해 반환 된 각 개체에는 사용자가 무시하는 charset 속성이 포함되어 있습니다. 당신은 같은 것을 사용하여, 루프에서 UTF-8로 각각 변환해야합니다 :

$subject .= mb_convert_encoding($header[$i]->text, "UTF-8", $header[$i]->charset); 

를 대안으로서, mb_decode_mimeheader 또는 iconv_mime_decode_headers 기능을 사용하는 것이 좋습니다. 이 두 함수는 PHP의 내부 인코딩 (대개 UTF-8)으로 문자열을 반환하면서 MIME 헤더를 디코딩하는 작업을 수행합니다. 맨 마지막에 하나의 작은 변화를 제외하고 위의 작품

+0

덕분에, 그것은 완벽했다. 게시 한 코드에 약간의 수정이 필요했습니다. 나는 누군가 다른 사람이 언젠가이 문제에 걸려 넘어지면 그것을 아래에 게시 할 것이다. – JoeRDG

0

코드 :

$subject .= mb_convert_encoding($header[$i]->text, "UTF-8", $header[$i]->charset); 
+0

답안에 수정 사항을 포함 시켰습니다. – duskwuff