2013-09-25 2 views
1

его сейчас два дня, работая над проектом для получения кода данных из содержимого тела электронной почты.Char £ conversion to = A3 с использованием Zend/Mail/on Ibmi

я нашел проблему относительно ПОЛУЧИТЬ голец как! "$% & /() =? ^.

решал все из них кодировок в UTF-8, но с £ полукоксом по-прежнему остается на содержании почты как «= A3»

Пример код здесь понять, в лучшем случае сценария я толкую:.

$mail = new Zend\Mail\Storage\Imap (array (
      'host' => 'imap.xxxxxxxx', //is gmail if it can be useful 
      'user' => '[email protected]', 
      '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.

PHP-скрипт, выполняемый программой CLP на IBMi, который вызывает его QP2TERM или QP2SHELL (теперь я использую QP2TERM для просмотра, что он делает).

Что вы думаете об этом? любая идея его решить?

Любые советы будут оценены,

С наилучшими пожеланиями

ответ

0

Прежде ISO-8859-1 кажется not to supportEuro sign. Теперь Windows-1252 действительно поддерживает его, однако есть большое недоразумение и стандартное смешивание.

Так называемый набор символов Windows (WinLatin1 или код Windows 1252, если быть точным) использует некоторые из этих позиций для печатных символов. Таким образом, набор символов Windows НЕ идентичен ISO 8859-1. Набор символов Windows часто называют «набором символов ANSI», но это СЕРЬЕЗНО НЕПРАВИЛЬНО. Он НЕ был одобрен ANSI.

Историческая справка: Microsoft основывает дизайн набора на черновике для стандарта ANSI. A glossary by Microsoft explicitly admits this.

Теперь некоторые операционные системы не может сделать большую разницу между ISO-8859-1 & Windows-1252, другие молча знать различия и не выходят из строя здесь.

  • Как в вас пример кода преобразовать в Windows-1252 (должен быть suppoted в зависимости от ОС):

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

Если вы работаете в Linux и теперь проверить кодировку строки, вы увидите что ОС (& PHP или курс) преобразует это значение в ISO-8859-1. Но это не проблема.

  • Отправьте правильный заголовок кодировки на: 'Content-Type: text/csv;charset=windows-1252'. Zend Mailer должен иметь интерфейс для настройки заголовков. Проверьте документы.

Отправьте электронное письмо как в HTML, так и в тексте.

Текст должен быть Windows-1252 закодирован. В HTML для специальных символов используйте их HTML Entities. Используйте htmlspecialchars() и UTF-8 или Windows-1252.

Это все большая проблема с этими стандартами кодирования символов, и каждый должен согласиться с одним общим стандартом, чтобы управлять ими всеми. :) Дополнительная информация here и here. Хорошая статья на Character Encoding (Unicode and Char. Sets) can be found here.

+0

Спасибо за ваш хороший объясненный ответ; D, но то, что вы говорите о отправке электронной почты и контента в разных форматах (с использованием и без использования сущностей) и кодирования тоже ... я попробовал их все xD, но тот же проклятый уникальный £ char остается = A3 T_T. Другие символы ALL works.i'm становятся сумасшедшими xD ... может быть, я останусь с заменой cmd? –

 Смежные вопросы

  • Нет связанных вопросов^_^