1

メール本文の内容からデータ コードを取得するプロジェクトに 2 日間取り組んでいます。

!"$%&/()=?^ のような get chars に関する問題が見つかりました。

すべてUTF-8にエンコードすることで解決しましたが、'=A3'のように£の文字がメール本文に残ったままです。

私が話していたシナリオをせいぜい理解するためのサンプルコードは次のとおりです。

$mail = new Zend\Mail\Storage\Imap ( array (
            'host' => 'imap.xxxxxxxx',  //is gmail if it can be useful
            'user' => 'xxxxx@xxxxxxxxx',
            'password' => 'xxxxxxxxxx',
            'port' => '993',
            'ssl' => 'SSL' 
      ) );

$folder = $mail->getFolders ()->INBOX;
foreach ( $mail as $emailMsg ) {
$bodymsg = $emailMsg->getContent ();
$pos = strpos ( $bodymsg, '*DATA CODE*' );
$datacode= substr ( $bodymsg, $pos + 11, 10 );
$datacode= mb_convert_encoding ($datacode,'ISO-8859-1','UTF-8');
echo $datacode; //example of  datacode £GS&9KBS8  but i get =A3GS&9KBS8

私は解決策を見つけました

$datacode= str_replace ( '=A3', '£', $datacode);

その後

$datacode= mb_convert_encoding ($datacode,'ISO-8859-1','UTF-8');

しかし、それは良い考えではないと思います。

UTF-8 、ISO-8859-**、windows-1252 でエンコードされたメールを読んでも同じ結果になります。

QP2TERMまたはQP2SHELLによってそれを呼び出すIBMi上のCLPプログラムによって実行されるPHPスクリプト(私は今QP2TERMを使用して、それが何をするかを確認します)。

それについてどう思いますか?それを解決するアイデアはありますか?

アドバイスをいただければ幸いです。

よろしくお願いします

4

1 に答える 1

0

まず、ユーロ記号をサポートしていないISO-8859-1ようです。現在はサポートされていますが、大きな誤解と標準的な取り違えがあります。Windows-1252

いわゆる Windows 文字セット (正確には WinLatin1、または Windows コード ページ 1252) は、これらの位置の一部を印刷可能な文字に使用します。したがって、Windows の文字セットは ISO 8859-1 と同一ではありません。Windows 文字セットは「ANSI 文字セット」と呼ばれることがよくありますが、これは深刻な誤解を招きます。ANSI によって承認されていません。

歴史的背景: Microsoft は、ANSI 標準のドラフトに基づいてセットの設計を行いました。Microsoftの用語集は、これを明示的に認めています。

ISO-8859-1現在、いくつかの OS は&の間に大きな違いを生まないかもしれませんが、Windows-1252他の OS は黙って違いを知っていて、ここで失敗しません。

  • あなたのコード例のように、次のように変換しますWindows-1252(OSに応じてサポートする必要があります):

$datacode= mb_convert_encoding ($datacode,'Windows-1252','UTF-8');

Linux を実行していて、文字列のエンコーディングをチェックすると、OS (& PHP またはコース) がこれを に変換したことがわかりますISO-8859-1。しかし、これは問題ではありません。

  • 正しい文字セット ヘッダーを次の宛先に送信します'Content-Type: text/csv;charset=windows-1252'。Zend Mailer には、ヘッダーを設定するためのインターフェイスが必要です。ドキュメントを確認してください。

HTML とテキストの両方でメールを送信します。

テキストはWindows-1252エンコードする必要があります。特殊記号の HTML では、それらのHTML エンティティを使用します。htmlspecialchars()およびUTF-8またはを使用しWindows-1252ます。

これらの文字エンコーディング標準はすべて大混乱であり、それらすべてを支配する共通の標準に誰もが同意する必要があります。:) 詳細については、こちらこちらをご覧ください。文字エンコーディング (Unicode および Char. Sets)に関する優れた記事は、ここにあります。

于 2013-09-26T09:54:33.040 に答える