Что такое код imap_mime_header_decode

Содержание

PHP/IMAP: ���������� ����� MIME ��������������

� ����� ����� ��� �� ��� ����, �� �� ���� �� ��� �� ������ ��� ��������. ����������, ������ ��� � ������ ���, ����� � ��������� IMAP, � � �����, ��� ���-�� �������. � ���� ������������� �����, ���������� � �������� �����, � «��� �������». ��� ��������, �� ����������� ����������� �����, ��������������� � MIME (� ��� �����), � � �� ����, ��� �������� ��� �� UTF-8. ����������, �������� ��������, ��� � �������, ������� � ��������� �������, ����� ��� � �.�. � �.�. ��. ��� ��� ����:

�� ����� ���� � ������ ���� �������� ��� ���������� ������. ��������, � ������� ����� ��������:

Cec est un test de cr = C3 = A9ation Directiontement par mail.

Ceci est un test decreration Directionment mail.

� ����� ����� �������, ������� ����������� ������������ ��� imap_fetchstructure(), ��� � imap_fetchbody(), �� � �� �����, ��� ��� ������ �� ��� ��������. ������������� imap_utf8() �� ��������.

� ����� ������� ������� ���� ����������� �������, �������������� ��� ���� � ���������� �������. �� � �� �����, ��� ��� ������� ������ ������� ���.

�������������: quoted_printable_decode() �������� ���������, �� ����������� ����, ��� �� �������� ������� ������ � «=\r\n», ������� � �� ���� ����������. � ����� ����� �� PHP ������������, �� ��� �� ������ �� ������. ��� ����.

FPublisher

Web-����������: ���� ������

������������ PHP

imap_mime_header_decode

imap_mime_header_decode � Decode MIME header elements

��������

array imap_mime_header_decode ( string $text )

Decodes MIME message header extensions that are non ASCII text (see � RFC2047).

������ ����������

������������ ��������

The decoded elements are returned in an array of objects, where each object has two properties, charset and text.

If the element hasn’t been encoded, and in other words is in plain US-ASCII, the charset property of that element is set to default.

�������

������ #1 imap_mime_header_decode() example

$elements = imap_mime_header_decode ( $text );
for ( $i = 0 ; $i count ( $elements ); $i ++) <
echo «Charset: <$elements[$i]->charset>\n» ;
echo «Text: <$elements[$i]->text>\n\n» ;
>
?>

��������� ���������� ������� �������:

In the above example we would have two elements, whereas the first element had previously been encoded with ISO-8859-1, and the second element would be plain US-ASCII.

��� ����� ��� imap_mime_header_decode

(PHP 3>= 3.0.17, PHP 4)

imap_mime_header_decode — ���������� �������� MIME-�����.

��������

array imap_mime_header_decode (string text)

imap_mime_header_decode() ���������� ���������� ����� MIME-���������, �� ���������� ASCII-������� (��. RFC2047). �������������� �������� ������������ � ������� ��������, ������ �� ������� ����� ��� ��������: «charset» � «text». ���� ������� �� ��������� �, ����� ������, �������� ������� ������� US-ASCII; �������� «charset» ����� �������� �������� �������� «default».

������ 1. imap_mime_header_decode()

� ���� ������� �� ������� ��� ��������, ��� ������ ������� ��� ����� ��������� � ISO-8859-1, � ������ ��� ������� ������� US-ASCII.


����� ���������� �����
imap_mailboxmsginfo ����� imap_msgno

���� �� �� ����� ��� ������, �� ���������� ��������������� ������� �� �����:

��� ����� ��� imap_mime_header_decode

(PHP 3>= 3.0.17, PHP 4 , PHP 5)

imap_mime_header_decode — Decode MIME header elements

Description array imap_mime_header_decode ( string text )

Пример 1. imap_mime_header_decode() example

$elements = imap_mime_header_decode ( $text );
for ( $i = 0 ; $i count ( $elements ); $i ++) <
echo «Charset: < $elements [ $i ]->charset >\n » ;
echo «Text: < $elements [ $i ]->text >\n\n » ;
>
?>

In the above example we would have two elements, whereas the first element had previously been encoded with ISO-8859-1, and the second element would be plain US-ASCII.

function decode_iso88591 ( $string ) <
if ( strpos ( strtolower ( $string ), ‘=?iso-8859-1’ ) === false ) <
return $string ;
>
$string = explode ( ‘?’ , $string );
return strtolower ( $string [ 2 ]) == ‘q’ ? quoted_printable_decode ( $string [ 3 ]) : base64_decode ( $string [ 3 ]);
>

This function does not code a-z 0-9 like the function posted by bandpay at hotmail dot com

function encode_iso88591($string) <
if( ereg(«[^A-Za-z0-9\ ]», $string) ) <
$text = «=?iso-8859-1?q?»;
for( $i = 0 ; $i

imap_mime_header_decode, utf-7 and utf-8 problem, i solved the problem using below function. note that iconv function for code converting.
you must replace «EUC-KR» as iconv parameter with charset you want such as «iso-8859-1».

function mime_decode($s) <
$elements = imap_mime_header_decode($s);
for($i = 0;$i charset;
$text =$elements[$i]->text;
if(!strcasecmp($charset, «utf-8») ||
!strcasecmp($charset, «utf-7»))
<
$text = iconv($charset, «EUC-KR», $text);
>
$decoded = $decoded . $text;
>
return $decoded;
>

I wrote a simple ks_c_5601-1987(2byte)
encode

function encode_ksc5601( $string )
<
$encode = base64_encode( $string );
$text = «=?ks_c_5601-1987?B?»;
$text = $text.$encode.»?=»;
return $text;
>

������������� �������� Windows-1252 � ������ ���� imap � UTF-8

� ���� ���� ���-����, ������� �������� ����� ����������� �� ��� ���-����, ��������� ���� ������ � Outlook. ��������� PHP � imap, � ������� ������ ���� ������ � �������� �� � ���� ������ mysql. �� ����� �� ������� ���-�� �������� ����� � ���-����� � ������ ���� ����� ������, � � ������� ���������� �����. ������ �� ���:

=? Windows-1252? Q? _Every_day_in_our_offices_we_recycle_cardboard,��������? =
=? Windows-1252? Q?
= 96_won = 92t_you_join_us = 3F? =

� ��������� ������������ ���� �����, ����� �� �������� ��������� �� ��������, ��������� ��������� ���:

����� � �������, � ��������� �� ������� ����� ����������� ������, �� � ���� ��������� ���������� ������� ��� ���� � �������� �������, ������� ���� � �������� ������ ������ ����. �������� ��������� ����:

������ ���� � ����� ������ �� �������������� ������, ��������, �� �������������� �� �� � ���?

��������� ����� ��������� �� UTF-8. ����� � ������������ ��������� ���-����� �� ISO-8859-1, ���������� ������� ���������� �������� �������� � ����, ��� �������, �� � ���� �������� ��������� ���-����� �� UTF-8.

����� ������ � ���, ��� ���������� �� ���������� ��������, �� ����� ��������� �� ISO-8859-1, ���� �� �������. ���������.

�������

������ �� ��������, ������������ imap_mime_header_decode �������� � ���� charset ��������, ������� �� �����������. ��� ����� ����� ������������� ������ �� ��� � UTF-8 � ����� �����, ��������� ���-�� �����:

� �������� ������������ ����������� ����������� ������������� mb_decode_mimeheader ��� �� iconv_mime_decode_headers �������. ��� ��� ������� ��������� ��� ������ �� ������������� MIME-��������� ��� ���, ��������� ������ �� ���������� ��������� PHP (������ ��� UTF-8).

������ �������

��� ���� �������� �� ����������� ������ ���������� ��������� �� ������ �����:

��� ����� ��� imap_mime_header_decode

(PHP 3>= 3.0.17, PHP 4)

imap_mime_header_decode — ���������� �������� MIME-�����.

��������

array imap_mime_header_decode (string text)

imap_mime_header_decode() ���������� ���������� ����� MIME-���������, �� ���������� ASCII-������� (��. RFC2047). �������������� �������� ������������ � ������� ��������, ������ �� ������� ����� ��� ��������: «charset» � «text». ���� ������� �� ��������� �, ����� ������, �������� ������� ������� US-ASCII; �������� «charset» ����� �������� �������� �������� «default».

������ 1. imap_mime_header_decode()

� ���� ������� �� ������� ��� ��������, ��� ������ ������� ��� ����� ��������� � ISO-8859-1, � ������ ��� ������� ������� US-ASCII.

�������� IMAP, ��� � ���, ��� �� ������ �� ����� �����������

����������� ����� � ��� ��������� ���������� ��� ������ ����������� � ���� �� � ����������� ��� ������, �� ��������� ������������ � ���������: �� ����� �������� ������, � ������� ���������� ������ ����������� ��� ��������� �������. �������� �� ����� � ������ ����� � � ���� ������ � �������� � ����, ������� ��������, ������ ��� ������� ������ �� �����, ��� �� �� �������� �������, ����� � ������ ���� ��������� ���� — ��� ��� ���������� � � ����� ������� ��� ���������� ����������� ��� ���.

��� � � ���� ������� ���������� ���������� �����, � ����� ��� ������� ������ ����� ������ c ��������� ����������� ������� �������� ����� ������� � ������ ��� ���������� ���������� ����������. ������ ��� ������ ����������� � ���, ���, ��� ������ ���-������������, � ����� ���������� ������ ������� ������� � ����, �� �� �������������� ����� �������� (�������) ������. ��, ��� ���� �������� ����������, ���� � � ����� ����, �� ��� ���������� ������ ��� ��������� ������ ���� ������� (�� ���� ����� ����). �� �� ����� ����������� �������� ������, ���� �������� ���������: �� ������ ����� ��������� ��������� ������ � ������� ������� � xls ������� ��� � �����, ��� ���������� ���� ���������� (���������� � �������� � ������� �� �� �������� �������� �, � ����������� �� ����������, ���-�� �������� ���-��, ��������� ��� ��������).

� ������, ��� �� ������� ����� ���������� ������� � ��� ������� ��� ���� ��������, ������� ����� �������� �� ������ �������:

  1. �������� ����� ��� ��������� ������� ����� �������� ���������;
  2. ������� ���� ��������� PHP ���������� � ����������� � ���������� ������;
  3. ������������ � �������� ���������� IMAP � ��� �������������;
  4. ����������� � ������ ����� ����� ����� � ������ �������� � �������� ������ �� ���� �����;
  5. ���������� ����� ������;
  6. ������� � ���������� ���� ������;
  7. ������� � �������� ��������� �����;
  8. ������������� ����������� ������;
  9. ������� ������.

���� �������� ��������, �� � ���������� �������� �� ����������� ��������� � �������. �������, ���������.

��������� �����

��������� � ���� ����� � ������� � ���������, ��� �������� ���� �� ���������:

����� � ������ ������ ���� ������� ������ ��������� ���������� � ������� �� ���:

������ �� ������ � ��������� ������ ����� ����� ��������� IMAP � POP3:

��� ������ ������ ������� ��� �� ����������� ����, �� � �����������, � �� ���� ���, ����� ������� ���������. ������� ���� � ��� ��������� ������, ������ ������� ��� �� ���������, ��� ��� ������� ��������� ������ ����� �������� IMAP.

��������� ���������� � � ���������

� ���� ������� �� �� ����� ����������� ������� ��������� ����������, ��� ��� ��� �� �����, � ������� ������ ��, ��� ���������� (� ������� � ��������� Sublime Text):

  • tmp � ����� � ������� ����� ��������� ��������� ����� �� ������, ���� ��� ����;
  • .htaccess � ��������� ��������� �����, ���� � ��� ������ apache;
  • functions.php � ���� ����� ��������� ���� �������;
  • main.css � ���� ������;
  • index.php � ����� ����� ����������;

��������� ����� ������������ UTF-8 � ������� ����� �������� ���� .htaccess ���������� ��������:

�������� IMAP

����������� � ������� ������ �����, ��� �������� � ������ ������ ����� ����� � ����� �������� POP3. ��� ������ �� ������ IMAP? �� ���� ���� �������� IMAP �������� ����� ����� � �������������� POP3, �������������, � ���� ���� ��� ����������� (�� ����� �������, ���������������� ����������), �� � ����� ������ �� ����� �������� ������ ��, ��� �� ����� �����. ����� � ������ ������� �� ����, ��� ������������ ��� ���������� ������ ��������� ������. ���� �� ����� ���� ������� ��� ����������� ������������ �������� POP3 �� ��� �������, ������� ��������� � IMAP ����� �������� � ��� ����.

������������ � ������ ����� ��� ������ ��������� IMAP

��� ���� ����� ������������ � ����� ��� ����� ����� ��� ���������: ����� �����, � ������ � ����� ��������� �������. ���� � ����� ����������� ������� ���, �� ������ ����� ����� ������ � ������ ������. �� ���� (��������� � ���� ��������) � ���� � ����� � ���� ����� ��������, ��� ������ �������� ������ �� ��������� �, ����������� ����, ��� ��� �� ������ ����������� ��������� ������ � ���, ��� �������, ���������. � �� ���� ������ ������ �� ����� � ����� ��� ������ ������ �� �������� ������ � ��������� �������� �������� . ��� ���������� ��� ��� ����� ��� �����������:

������ ����� ���������� ��������������� � ������ ����:

������ ����� ������������� ��������� ��������� UTF-8 ��� ������ ��������� � ��������� ����������� ������. ���������� ���� functions.php � ��������� ���������, � ������� ���� ���� ����. � ������� $mail_filetypes ����������� ������� ������, ������� ��� �����. ��� ���� ������ �������, ����� ������� �������� �����, � �������� ���������� �����. ���������� � ������ ���������� ��� ������ ������� imap_open(), ������� ��� ������� ���������� ���������� IMAP-�����, � ��� ��������� — false (�� ���� �������� ����������� ������, �� ��� �� ���). ��������� ������ � �������� ��� ������ ������� imap_close() ������� �� ��������� ����������. ����� ����� ����� ��������� ��� ������� �������� ��������.

��� ������� ���������� ��� ������ imap_num_msg() ������ ����� ����� �� ����� � ��������� ������, � ������� ����� �������� ��� ��� ����������� ������ �� ������. ����� ������� ����, � ������� ����� �������������� ������ ������ �� ��� ������ (��������� ���������� �� 1) �� �����������.

��������� ����� ������

��� ��������� ����� ������ ���������� ��������������� �������� imap_header(), ������ ���������� ������� ������ ����� ������:

�� ������ ����� �� ������� ������, �� �������� � ����� ���������� ������ ��� ������, �������� � ������ $mails_data. ��� ������ ������ �� �����:

�� ���� ��������� �����, ��� ��� ������ �����������, �� ��� ������ ���� �� ������, �����, ��, ��� �������. ������� ������ — ��������� ���� ������. ��� ����� ���� ����� ������ � ���� ������ ���� ��������������. ����� �� �������� � � ����� ������ � � ���������� �������.

��������� � ����� �������: ��������� �����, ���� ��������� ������, email ���������� � ����������� � ��������� � ��������� ���� ������. ��� ����� ��� ���������� ������� �������� ��� ������� � ���� functions.php:

�������� ��������� �, � �����, ����� �������� ������ ��������� �������. ��� ��������� �������������� ������ � ��� ������ imap_mime_header_decode() ���������� ��, � ���������� ���� ������������ ������ ��������, � ������� �� ������� ���� ��� �������� charset (���������) � text (����� ����). ������ �� ������: � ����� �������� ���������, �������� � UTF-8 � ��������� ���� � ������ ��������� � ���������� ���.

������ ������� � ���� index.php � ������� ��������� ��������:

�� ���� ��������� ����� ������ ����� ���������.

�������� � ����� ������

���������� ���������� ����������� ��� ������ � ������������� ������� ������ � ������ ��� ��������� ���� ��� ���������� ��������������� ����� ���������:

� ������ ���������� $msg_structure ��������� ��������� ������ � ��� ������, � ������� ����� ����� ����� �������� ����������, ������ ����� ����� ������� ����������� ����:

��� ����� ��� ������� ����� ������:

  • type � ��������� ��� ���� ������, � ����������� �� ����, ��� � ��� �������� �� ����� �� ����� �������� �� 0 �� 7 (������ ����� �������� ���� ��� �������� ������� ���������� � ���� ������);
  • encoding � ��������� ��������� ����, �������� �� 0 �� 5 (0 — 7BIT, 1 — 8BIT, 2 � BINARY, 3 — BASE64, 4 — QUOTED-PRINTABLE, 5 — OTHER);
  • parts � ������ ������ ������, ������� ������������� ��������� ������� ������� ����.

������� ��������� ���������� �������� parts. ������, ��� ����� ������� ��� ��, ��� � ������� ������ ����� ������� ���������� ����������, ��������������� ������ ������ ������, � ������� � ������� � ��������� ������. ����� � ������ ������� ����������� type � � parameters ��������� � ����� � � �� ����� ����.

��������� ������ ����� ���� ������� ������ ���������, �� ������ ���� � ���� ���� ������, ����� �������� �� ������ — ���� �������, ������� ����� �, ��� ���������, ������������ ��� � ���������� ����������� �������� ����������� �������.

������ ������� imap_fetchbody() ��������� ����������� ����� ������, ���� ����� � �������������� ����.

������ ������� ����������, � ������� ����� ��������� ������������ ������ ���� ������:

������� � ���� functions.php � ������� ����������� �������:

������� recursive_search() ��������� ���� �������� � ��������� ������, ��� ��������������� ��������� �������� � ������� ��� ���������: encoding, charset, subtype. ������ ������ �� �������� �������� ���������� �������� parts � ������� �������. ������ �������� ��� ����� ������, �� ���� � ����� �������, ��� � ��� ����������.

������� ��� ���� ������� ��� ��������������� ���� ������, ������� ��� ����������� � ����������:

��������� ������ � ������������ � ���� index.php, ��� ����� ��������� ���:

����� ����, ��� �� �������� ������ �� ��������, ���������� ��������� ��������� ��������� �, � ����������� �� �����, �������� ������� structure_encoding() � ���������������� �����������. � ��������� �������� ��������� ���������, ��, ��� �� �������� � UTF-8 � ���� ����� ���� ����������� � ��� ��������� �������� �� ���������, ������������.

�������� �������� �����:

� ���� ������ ����� ���������, ��� � ������� �����, ��� � HTML �������� �� ������ �������. �������� � BASE64, ����� ��� ������������ �� ������� ��� ���� �������.

��������� �����

���, ������ ����������� � ����� ��������� ������ ����������:

�����, ���������� �� ��������� ���������� ����� ������� ������, � ������ — ������ ������ ���. ������� ������ � ������ ���������� ������ � ����� ������, ������ ���� ���� �������� � ������� ��� � ������� �������� parts. �� �������� ��������� ��������, �������� �� ������� �����. ��� ������ �������� ������� file_put_contents() �� ��������� ��� ���� � ���� �� ������ � ����� tmp.

���� ������� ���������!

� �������� ������ � ��� ������������� ������ � ������� $mails_data, � ��� ������������ �� ��� ����� �������� ��������������� � ���. � ���� ������ � ����������� �������� ������, ������� ������ � ���� �����, ������� ������, ��� � ��� ���������� � �����:

��� ������ ���� �������� ������ � ��� ���������� ������, ���, �������� ������ ���������� ����� �� ������ ��������. ������ ��������� � ����� HTML ��������:

����� � �� ���� ��� ���������, ��� ��� ��� ������ ���� �� ������, � �����:

� �� ������� � ����� tmp � ��� �������� ����.

����������

�������� ��� ����� �� ������, �� ���������� �������� ����������, �� �� �� ��� ������, ��� ����� ���������� � ���� ��������� �����, ������� ���������� ���������. ��� ��������� ������� ��� ���������� ������ ���������� ������� �� ���������� �� ���� ������, ������ ����� ���� � ��������� ����, � ������ �� ������� ����� ���� ���� ������. ��� �� ������������ ����� ���������, ��� ������ ����� � �� ������������ ������������� �����������, ������� ����� ��������� ��������� ��������� ��� ������ � ��������� �����������. �� ���� � ���� ��, ������� ��� ����������� ������ ������ ��� ������ � ����� �������������� ��������� ������ �����.

������������� ��� Windows 1252 �������� � ������ ���� IMap � UTF-8

� ���� ���� ����, ������� �������� ����� ��������� ���� � ���, ��������� ������ ���� ��������� ����������� ����� � Outlook. ������������� PHP � IMAP, � ������� ������ ���� ������ � ��������� ��� � �� MySQL. �� ������ ��� � �� �����, ���-�� ����� ���������� ����� � ���-����� � ���� ���� ����������� �����, � � ������ ���������� �����. ������� �����:

=? Windows-1252? Q? _Every_day_in_our_offices_we_recycle_cardboard, ��������? = =? Windows-1252? Q? = 96_won = 92t_you_join_us = 3F? =

��� � ������, ��� ���������� ������������ ���� ����� ����� �������, �� ����� ��������� ��������� �� ��������, ��������� ��������� ���:

����� ��������, � ���������� �� ����������� �� ����������� ������, �� � ������� � ������� �������� ��� �������� ���� � �������� ������, ������� ��� � �������������� ������ ������ ����. �������� ��������� ����:

������ ���� � ����� ������ �� �������������� ������, ��������, ����������� �� �������������� � ���?

��������� ��� ���-����� ���������� � UTF-8. ����� � ��������� ��� ������� � ISO-8859-1, ������� ������ �������� ��������� ������ � ����, ������� �������� �������, �� � ����, ����� �������� ��������� ���-����� � ��������� UTF-8.

����� ������ � ���, ��� ���������� �� �������� ������ ��� ��������� ��������� �������� � ISO-8859-1 ���� �� �������. ���������.

����� �������� ����� ������������� �������� ����� � ������?

������� �������� ������������� ����� � ������. ������ �������� ������ ��� �� ���������� ��� ���������� � ����:

�� ����� ����� ������ � ������� ��� ����� � ����:

imap_mime_header_decode($value) � ���� ������ �� ��������.
� ���� ��� ��� ������ ����� ������� �� » � ��������� urldecode, �� ����� ��� ��� ����� ������� �������� ������ ������� ��� �� ������������.

������ ���� ����� ������ ���������� �� imap_fetchbody():

����� ��������� ������:

—=_3318071e8a22163e63d59b7e832d6cf5
Content-Transfer-Encoding: base64
Content-Type: application/octet-stream;
name*0*=UTF-8»%D0%9F%D1%80%D0%B0%D0%B7%D0%B4%D0%BD%D0%B8%D1%87%D0%BD%D0;
name*1*=%BE%D0%B5%20%D0%BC%D0%B5%D0%BD%D1%8E%20-%20%E2%84%961.doc
Content-Disposition: attachment;
filename*0*=UTF-8»%D0%9F%D1%80%D0%B0%D0%B7%D0%B4%D0%BD%D0%B8%D1%87%D0%BD;
filename*1*=%D0%BE%D0%B5%20%D0%BC%D0%B5%D0%BD%D1%8E%20-%20%E2%84%961.doc

imap_mime_header_decode

(PHP 4, PHP 5, PHP 7)

imap_mime_header_decode � Decode MIME header elements

Description

Decodes MIME message header extensions that are non ASCII text (see � RFC2047).

Parameters

Return Values

The decoded elements are returned in an array of objects, where each object has two properties, charset and text.

If the element hasn’t been encoded, and in other words is in plain US-ASCII, the charset property of that element is set to default.

Examples

Example #1 imap_mime_header_decode() example

$elements = imap_mime_header_decode ( $text );
for ( $i = 0 ; $i count ( $elements ); $i ++) <
echo «Charset: < $elements [ $i ]->charset > \n» ;
echo «Text: < $elements [ $i ]->text > \n\n» ;
>
?>

The above example will output:

In the above example we would have two elements, whereas the first element had previously been encoded with ISO-8859-1, and the second element would be plain US-ASCII.

See Also

User Contributed Notes

A nice way to decode strings is to use the mb_list_encodings(), but I had two problems with it:
sometimes, the charset is uppercase in the header an lowercase in mb_list_encodings() and sometimes, the charset is not in the mb_list_encodings() list.

function upperListEncode () < //convert mb_list_encodings() to uppercase
$encodes = mb_list_encodings ();
foreach ( $encodes as $encode ) $tencode []= strtoupper ( $encode );
return $tencode ;
>

function decode ( $string ) <
$tabChaine = imap_mime_header_decode ( $string );
$texte = » ;
for ( $i = 0 ; $i count ( $tabChaine ); $i ++) <

switch ( strtoupper ( $tabChaine [ $i ]-> charset )) < //convert charset to uppercase
case ‘UTF-8’ : $texte .= $tabChaine [ $i ]-> text ; //utf8 is ok
break;
case ‘DEFAULT’ : $texte .= $tabChaine [ $i ]-> text ; //no convert
break;
default: if ( in_array ( strtoupper ( $tabChaine [ $i ]-> charset ), upperListEncode ())) //found in mb_list_encodings()
< $texte .= mb_convert_encoding ( $tabChaine [ $i ]->text , ‘UTF-8’ , $tabChaine [ $i ]-> charset );>
else < //try to convert with iconv()
$ret = iconv ( $tabChaine [ $i ]-> charset , «UTF-8» , $tabChaine [ $i ]-> text );
if (! $ret ) $texte .= $tabChaine [ $i ]-> text ; //an error occurs (unknown charset)
else $texte .= $ret ;
>
break;
>
>

This function does not code a-z 0-9 like the function posted by bandpay at hotmail dot com

function encode_iso88591($string) <
if( ereg(«[^A-Za-z0-9\ ]», $string) ) <
$text = «=?iso-8859-1?q?»;
for( $i = 0 ; $i

Here’s a «flatMimeDecode» version converting UTF-8 to iso-8859-1:

function flatMimeDecode($string) <
$array = imap_mime_header_decode ($string);
$str = «»;
foreach ($array as $key => $part) <
if($part->charset == «UTF-8») <
$str .= utf8_decode ($part->text);
>else <
$str .= $part->text;
>
>
return $str;
>

Beware of multilined subjects containing whitespaces which are not part of the subject itself, but needed as functional characters for the clients.

i.e. you can have a mail header containing content like
Subject: =?iso-8859-1?Q?WG=3A_Mobilit=E4t_verschlechtert_—=3E_174?=
=?iso-8859-1?Q?6?=

(carriage return and tabspace).
imap_mime_header_decode returns 5 parts (and not expected 2)
for this example.
— The first containing the space between «subject:» and the subject itself.
— The second is the first encoded text
— The third will be the line-break within the head lines.
The were inserted to keep rfc compliant line length and are NOT part of the original subject entered by the sender.
— The fourth will be the second part of the subject.
— The fifth is a line break — the last character will be a line break any time other head lines or mailbody will follow, so it’s needed in the head — but not part of the original subject.

The example of diego is working well, he has a (very) little
mistake in his code. Here is the corrected version:

//return supported encodings in lowercase.
function mb_list_lowerencodings () < $r = mb_list_encodings ();
for ( $n = sizeOf ( $r ); $n —; ) < $r [ $n ]= strtolower ( $r [ $n ]); >return $r ;
>

// Receive a string with a mail header and returns it
// decoded to a specified charset.
// If the charset specified into a piece of text from header
// isn’t supported by «mb», the «fallbackCharset» will be
// used to try to decode it.
function decodeMimeString ( $mimeStr , $inputCharset = ‘utf-8’ , $targetCharset = ‘utf-8’ , $fallbackCharset = ‘iso-8859-1’ ) <
$encodings = mb_list_lowerencodings ();
$inputCharset = strtolower ( $inputCharset );
$targetCharset = strtolower ( $targetCharset );
$fallbackCharset = strtolower ( $fallbackCharset );

$decodedStr = » ;
$mimeStrs = imap_mime_header_decode ( $mimeStr );
for ( $n = sizeOf ( $mimeStrs ), $i = 0 ; $i $n ; $i ++) <
$mimeStr = $mimeStrs [ $i ];
$mimeStr -> charset = strtolower ( $mimeStr -> charset );
if (( $mimeStr == ‘default’ && $inputCharset == $targetCharset )
|| $mimStr -> charset == $targetCharset ) <
$decodedStr .= $mimStr -> text ;
> else <
$decodedStr .= mb_convert_encoding (
$mimeStr -> text , $targetCharset ,
( in_array ( $mimeStr -> charset , $encodings ) ?
$mimeStr -> charset : $fallbackCharset )
)
);
>
> return $decodedStr ;
>
?>

The previous comment (from hans) seems to make no sense at all, since it will not change the encoding and possibly result in a «multiencoding» string (that the browser and anything else will be unable to render, of course).

I use a little function to decode the whole header to a specified encoding. It is as follow:

//return supported encodings in lowercase.
function mb_list_lowerencodings () < $r = mb_list_encodings ();
for ( $n = sizeOf ( $r ); $n —; ) < $r [ $n ]= strtolower ( $r [ $n ]); >return $r ;
>

// Receive a string with a mail header and returns it
// decoded to a specified charset.
// If the charset specified into a piece of text from header
// isn’t supported by «mb», the «fallbackCharset» will be
// used to try to decode it.
function decodeMimeString ( $mimeStr , $inputCharset = ‘utf-8’ , $targetCharset = ‘utf-8’ , $fallbackCharset = ‘iso-8859-1’ ) <
$encodings = mb_list_lowerencodings ();
$inputCharset = strtolower ( $inputCharset );
$targetCharset = strtolower ( $targetCharset );
$fallbackCharset = strtolower ( $fallbackCharset );

$decodedStr = » ;
$mimeStrs = imap_mime_header_decode ( $mimeStr );
for ( $n = sizeOf ( $mimeStrs ), $i = 0 ; $i $n ; $i ++) <
$mimeStr = $mimeStrs [ $i ];
$mimeStr -> charset = strtolower ( $mimeStr -> charset );
if (( $mimeStr == ‘default’ && $inputCharset == $targetCharset )
|| $mimStr -> charset == $targetCharset ) <
$decodedStr .= $mimStr -> text ;
> else <
$decodedStr .= mb_convert_encoding (
$mimeStr -> text , $targetCharset ,
( in_array ( $mimeStr -> charset , $encodings ) ?
$mimeStr -> charset : $fallbackCharset )
)
);
>
> return $decodedStr ;
>
?>

Hope it helps.

I wrote a simple ks_c_5601-1987(2byte)
encode

function encode_ksc5601( $string )
<
$encode = base64_encode( $string );
$text = «=?ks_c_5601-1987?B?»;
$text = $text.$encode.»?=»;
return $text;
>

function decode_iso88591 ( $string ) <
if ( strpos ( strtolower ( $string ), ‘=?iso-8859-1’ ) === false ) <
return $string ;
>
$string = explode ( ‘?’ , $string );
return strtolower ( $string [ 2 ]) == ‘q’ ? quoted_printable_decode ( $string [ 3 ]) : base64_decode ( $string [ 3 ]);
>

imap_mime_header_decode, utf-7 and utf-8 problem, i solved the problem using below function. note that iconv function for code converting.
you must replace «EUC-KR» as iconv parameter with charset you want such as «iso-8859-1».

function mime_decode($s) <
$elements = imap_mime_header_decode($s);
for($i = 0;$i charset;
$text =$elements[$i]->text;
if(!strcasecmp($charset, «utf-8») ||
!strcasecmp($charset, «utf-7»))
<
$text = iconv($charset, «EUC-KR», $text);
>
$decoded = $decoded . $text;
>
return $decoded;
>

Илон Маск рекомендует:  Элементы div и span
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL