php.de

Zurück   php.de > Webentwicklung > PHP-Fortgeschrittene

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Thema geschlossen
 
LinkBack Themen-Optionen Thema bewerten
Alt 16.12.2010, 02:02  
Neuer Benutzer
 
Registriert seit: 14.12.2010
Beiträge: 2
PHP-Kenntnisse:
Fortgeschritten
print_r befindet sich auf einem aufstrebenden Ast
Standard Mail Encoding Konvertierung schlägt fehl für besondere Zeichen

Hallo,

ich arbeite zur Zeit an einem Skript, dass Mails von einem E-Mail Konto abruft und in einer Datenbank ablegt.
Dabei interessiert nur der Text, also nur der Plain Text Teil - auch in HTML Mails.

Der Text soll, um nur wenige Zeichenkodierungen auszuschließen, UTF-8 kodiert in der Datenbank gespeichert werden.
Folgende E-Mail bereitet mir Probleme:
Code:
[...Mehr Headerzeilen...]
Date: Sat, 11 Dec 2010 17:50:31 +1100
Subject: Test
From: ...............
To: ...............
Mime-version: 1.0
Content-type: multipart/alternative; boundary="B_3374934632_9860382"

> This message is in MIME format. Since your mail reader does not understand
this format, some or all of this message may not be legible.

--B_3374934632_9860382
Content-type: text/plain;
  charset="ISO-8859-1"
Content-transfer-encoding: quoted-printable

This test =ADpart of the test suite=B9s test

--B_3374934632_9860382
Content-type: text/html;
  charset="ISO-8859-1"
Content-transfer-encoding: quoted-printable

<HTML>
<HEAD>
<TITLE>Test</TITLE>

</HEAD>
<BODY>
<FONT FACE=3D"Verdana, Helvetica, Arial"><SPAN STYLE=3D'font-size:14pt'>
This test –part of the test suite’s test<BR>
</SPAN></FONT>
</BODY>
</HTML>

--B_3374934632_9860382--
In der Plain Text Version taucht =AD und =B9 auf, diese Zeichen werden nicht richtig konvertiert. (dazu später mehr)

Bei =AD handelt es sich um einen längeren Bindestrich ("en dash", siehe http://www.ascii.cl/htmlcodes.htm) und bei =B9 um eine Art Apostroph ("right single quotation mark", siehe siehe http://www.ascii.cl/htmlcodes.htm).
Die Zeichen werden in der HTML Repräsentation so aufgeführt:
En dash: & #8211;
Right Single quotation mark: & #8217;
(die Leerzeichen hab ich eingefügt, so dass es im Forum nicht in das korrekte Zeichen umgewandelt wird)

Um das Problem einfacher reproduzieren zu können, hab ich folgendes Testskript geschrieben. Die Umwandlung wird mit quoted_printable_decode und iconv gemacht:
Code:
<html>
  <head><meta content="text/html; charset=utf-8" http-equiv="content-type"></head>
  <body>
    <?php
   
    $msg = 'My test =ADpart of the test suite=B9s tests';
    $msgHtml = 'My test –part of the test suite’s tests';
   
    echo 'Correct (from HTML): ' . html_entity_decode($msgHtml) . '<br/>';
     
    $msg2 = quoted_printable_decode($msg);
    $msg2 = iconv('ISO-8859-1', 'UTF-8', $msg2);
    echo 'Wrong (from plaint text): ' .html_entity_decode($msg2). '<br/>';
   
    ?> 
  </body>
</html>
Die Ausgabe ist die folgende:
Code:
Correct (from HTML): My test –part of the test suite’s tests
Wrong (from plaint text): My test part of the test suite¹s tests
Der Bindestrich wird im Browser gar nicht dargestellt, es handelt sich wohl um ein Steuerzeichen, dass durch den Fehler entsteht. Wenn man den Text in einen Texteditor kopiert, dann taucht der Bindestrich auf.

Ansonsten ist die falsche Konvertierung offensichtlich: aus dem Apostroph wird eine hochgestellte Eins.
Ich weiß, dass die Mail von einem Mac Computer kommt, der Client war Microsoft Entourage. Nach Aussage des Absenders werden Apostrophe und Bindestriche immer so dargestellt, die "normale" Kodierung als single quotation mark bzw. minus/hyphen wird nicht benutzt

Ich hoffe, jemand kann mir helfen, die Konvertierung zu korrigieren.
Vielen Dank für eure Hilfe!

Schönen Gruß
print_r
print_r ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 16.12.2010, 05:10  
Erfahrener Benutzer
 
Registriert seit: 23.08.2010
Beiträge: 495
PHP-Kenntnisse:
Fortgeschritten
mimomamu sorgt für eine eindrucksvolle Atmosphäremimomamu sorgt für eine eindrucksvolle Atmosphäre
Standard

Zitat:
Zitat von print_r Beitrag anzeigen
Bei =AD handelt es sich um einen längeren Bindestrich ...
Eigentlich handelt es sich dabei um die kodierte Repräsentation von 8 Bits. Welchem Zeichen diese entsprechen kann nur unter Rückgriff auf die Zeichenkodierung der Eingabe bestimmt werden. Laut deiner Mail ist das ISO-8859-1. In ISO-8859-1 gibt es aber überhaupt keinen en-dash und die hochgestellte 1 liegt bei 92 und nicht bei B9.

Zitat:
Zitat von print_r Beitrag anzeigen
... es handelt sich wohl um ein Steuerzeichen, ...
Laut ISO8859-1 ein soft-hyphen. Zu deutsch: der Rechner darf dort einen Trennstrich einfügen und in der nächsten Zeile weiterschreiben.

Zitat:
Zitat von print_r Beitrag anzeigen
... aus dem Apostroph wird eine hochgestellte Eins.
Auch das ist nach ISO8859-1 richtig.

Zitat:
Zitat von print_r Beitrag anzeigen
Ich weiß, dass die Mail von einem Mac Computer kommt, ...
Da vermute ich den Fehler.

Zitat:
Zitat von print_r Beitrag anzeigen
Code:
[...Mehr Headerzeilen...]
Date: Sat, 11 Dec 2010 17:50:31 +1100
Subject: Test
From: ...............
To: ...............
Mime-version: 1.0
Content-type: multipart/alternative; boundary="B_3374934632_9860382"
Leider steht da nichts über die genau Version des Programms, das die E-Mail estellt hat. Falls die irgendwie in Erfahrung bringen könntest, dann könnte man nachforschen ob der irgendwelche Bugs mit Zeichensätzen hat.
__________________
Meinungen, die ich geäußert habe, sind nicht notwendigerweise meine eigenen. Abweichungen von der deutschen Rechtschreibung unterliegen dem Urheberrecht, dürfen aber unter den Bedingungen von verwendet werden

Geändert von mimomamu (16.12.2010 um 05:27 Uhr).
mimomamu ist offline  
Alt 16.12.2010, 10:55  
Neuer Benutzer
 
Registriert seit: 14.12.2010
Beiträge: 2
PHP-Kenntnisse:
Fortgeschritten
print_r befindet sich auf einem aufstrebenden Ast
Standard

Die genaue Version ist im Header enthalten, ich hatte es nur rausgenommen:
Code:
User-Agent: Microsoft-Entourage/12.28.0.101117
Es scheint mir zum jetzigen Zeitpunkt so, dass ich die E-Mail nur falsch interpretieren kann, wenn ich in diesem Fall den Plain Text Teil verarbeite. Das ist natürlich sehr unbefriedigend.

Was würdet ihr mir raten? Zur HTML Repräsentation generell wechseln?
Es geht ja nur um den Text, ich habe die Befürchtung, dass ich dann mit all den HTML Tags und Formatierungen zu kämpfen habe um nur den korrekten Text zu übernehmen.
print_r ist offline  
Alt 16.12.2010, 12:35  
Erfahrener Benutzer
 
Registriert seit: 19.06.2009
Beiträge: 837
PHP-Kenntnisse:
Fortgeschritten
Jens Clasen ist einfach richtig nettJens Clasen ist einfach richtig nettJens Clasen ist einfach richtig nettJens Clasen ist einfach richtig nettJens Clasen ist einfach richtig nett
Standard

Crossposting: http://phpforum.de/forum/showthread.php?t=258736

Bitte beachten: Anmerkung zu Multipostings

Gruß Jens
Jens Clasen ist offline  
Thema geschlossen


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] Regulärer Ausdruck schlägt fehl HSFighter PHP Tipps 2010 2 20.08.2010 21:16
[Erledigt] in_array schlägt fehl obwohl werte um array vorhanden sind litterauspirna PHP Tipps 2010 8 13.03.2010 14:57
[Erledigt] Eintrag schlägt fehl Extremefall PHP Tipps 2009 17 19.12.2009 17:42
MySQL Verbindung schlägt fehl, trotz richtigem USER/PW CyberNibbler Datenbanken 5 24.09.2009 19:43
ReflectionClass export schlägt fehl bei Zugriff auf Klassenkonstante tereano PHP-Fortgeschrittene 4 30.03.2009 13:16
PHP5 SOAP - Problem mit Arrays Calexico PHP-Fortgeschrittene 0 11.09.2008 12:06
.htaccess login schlägt fehl sternschnuppe99 Server, Hosting und Workstations 6 07.02.2008 13:37
login schlägt immer fehl sternschnuppe99 Server, Hosting und Workstations 3 07.02.2008 13:28
[Erledigt] Konvertierung OEM ASCII zu Windows ANSI Zeichen PHP-Fortgeschrittene 5 12.08.2005 12:42

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php mail encoding, =3d email kodierung, php mail codierung, php email encoding, this message is in mime format. since your mail reader does not understand, quoted_printable_decode utf8, email encoding, php mail zeichensatz, http://www.php.de/php-fortgeschrittene/75131-mail-encoding-konvertierung-schlaegt-fehl-fuer-besondere-zeichen.html, content-transfer-encoding quoted-printable iconv encoding, php mail mit bindestrich, php mail gedankenstrich, php mail plain zeichenlänge, ad charset to php, fehlermeldung: \this message is in mime format. since your mail reader does not understand this format, some or all of this message may not be legible\, php codierung mail, html mail mac bindestrich, utf-8 minuszeichen darstellung, iconv utf8 gedankenstrich, php mail body konvertieren

Alle Zeitangaben in WEZ +2. Es ist jetzt 01:17 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum