2017-11-16 25 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?Q? ? = 96_won = 92t_you_join_us = 3F =私がやったことは、それは次のコードを使用して、ページ上の通常表示されますので、このテキストを解読しようとしている

:終了したら

$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に設定すると、置換文字は中かっことemダッシュに置き換えられますが、これは素晴らしいですが、ウェブサイトの文字セットをUTF-8にしたいと考えています。

文字セットをISO-8859-1に変更せずに置換文字を取り除く方法についてのヘルプは素晴らしいでしょう。ありがとう。

答えて

0

imap_mime_header_decodeによって返される各オブジェクトには、無視する対象のcharsetプロパティが含まれています。 mb_decode_mimeheaderまたはiconv_mime_decode_headers機能を使用することを検討して、別の方法として

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

:あなたはのようなものを使用して、あなたのループ内でUTF-8にそれぞれ1を変換する必要があります。これらの関数はどちらも、PHPの内部エンコーディング(通常はUTF-8)で文字列を返し、MIMEヘッダーをデコードする全仕事をします。最後に一つの小さな変更を除いて作品上記

+0

おかげで、それは完璧でした。あなたが投稿したコードに小さな編集が必要でした。他の誰かがこの日中に遭遇した場合には、私はそれを下に掲示します。 – JoeRDG

0

コード:

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

私はあなたの修正を自分の答えに組み入れました。 – duskwuff

関連する問題