Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
p01-contact mag keine Umlaute
#1
me again Smile

Hallo,
ich frickel schon ne Std. an einm blöden Problem:

Wenn der Name des Absenders Umlaute enthält,
entsteht nach jedem Umlaut eine neue Absenderadresse:

S&ouml@dd12300.hoster.com, s&ouml@dd12300.hoster.com, nke <nke@domainname.de>

hier in Sösönke wegen der ö´s.


----
  • Plugins > p01-contact Sprache = de (Standardsprache ist de)
  • p01-contact-Standardwerte sehen so aus: name!, email!, subject!, message! und label werden in der Seite
    auch de-übersetzt.
  • in der p01-contact.php > function lang($key) stimmt der $path auf die de.php
  • Das Template ist <html lang="de"> eingestellt
  • Einstellungen GS ist de



im debug-modus sieht der header so aus:
From: Sösönke
Reply-To: Sösönke
Return-Path: Sösönke
MIME-Version: 1.0
Content-type: text/html; charset=UTF-8
X-Mailer: PHP/5.2.12-nmm4

eigentlich ok ... keine Ahnung, wo ich noch schauen soll Sad(

kennt jemand das Probelm? und kann es lösen?

Danke, Gruß, B.
Reply
#2
nachzutragen: natürlich neueste GS- und Plugin-software-versionen und
Themes im Header:
<meta charset="utf-8">

in htaccess
AddDefaultCharset UTF-8

-------------------------------------------

ich habe jetzt ein workaround:
in der p01-contact.php ändern:
Code:
function send_mail() ...
z700        case 'textarea' :
                  $content .= '<p style="margin:10px;padding:10px;border:1px solid silver">';
                  $content .= nl2br($value) . '</p>'.$name; // name hier angefügt
...

z760            $headers  = "From: <$email>\r\n";           // entfernt $name hier, da eben zu Umlaut-fehler.
...

Grüße, B.
Reply
#3
Belletage Wrote:im debug-modus sieht der header so aus:
From: Sösönke
Reply-To: Sösönke
Return-Path: Sösönke
MIME-Version: 1.0
Content-type: text/html; charset=UTF-8
X-Mailer: PHP/5.2.12-nmm4
eigentlich ok
Nein, das ist nicht okay. In E-Mail-Headern dürfen nur ASCII zeichen verwendet werden (siehe RFC 5322). Soll nun ein Header-Field Umläute (oder andere nicht erlaubte Zeichen) enthalten, so kann es speziell kodiert werden. Dies wird in p01-contact.php in Zeile 723 mit dem Betreff gemacht. Ganz analog sollte dann auch der Absender behandelt werden; in Zeile 724 einfügen:
Code:
$name = '=?utf-8?B?' . base64_encode($name) . '?=';
(ich habe das allerdings nicht getestet, da ich das Plugin nicht installiert habe).

Christoph
Reply
#4
Hallo,
Danke, super, es funktioniert - fast. Das Wichtigste: E-Mail wird nicht gesplittet.
(btw.: kennt der p01-contact-Autor das Problem nicht?)

Aber:
Ich bekomme die Mails nicht ansehenlich hin.
Die Frage ist, ob das an den E-Mail-Clienten liegt:

im SeaMonkey-Mailer siehts z.B. unter "Von:" und in den Kopfzeilen so aus:
S&ouml;s&ouml;nke <soenke@domainname.de>

in PopTray (poptray.org) z.B. ganz übel:
=?utf-8?B?UyZvdW1sO3Mmb3VtbD ...

Die meisten Mails, die ich bekomme, kann man in o.g. Mailern lesen / sind richtig kodiert.
Man weiß ja aber nicht, mit welchen Mailern die p01-contact-Nutzer arbeiten.

Fehlt in den p01-contact-headers wohl noch eine Info, anhand der Klienten
die Strings lesbar umkodieren können?
Das ist ja ok/gegeben: $headers .= "Content-type: text/html; charset=UTF-8\r\n";

Gruß B.
Reply
#5
Bella,

ich stecke mitten im Auspacken von 45 Buchkartons nach meinem Umzug, und hab deshalb echt wenig Zeit, aber ich muss sagen, ich nutze das Script auch und habe nicht solche Probleme wie du.

welchen Zeichensatz hat denn die SEite, in der das Formular sitzt? Könnte es das sein?
Da Umlaute wenn kodiert mit einem ; enden, und das als Trennzeichen für mehrere Empfänger gedacht ist, ist klar, dass geteilt wird...

schau bitte mal nach dem Zeichensatz deines Templates, ob es UTF-8 ist (wirklich UTF-8, nicht utf-8)

und woher sollen wir wissen, ob der Pluginentwickler das Problem kennt? Da musst du ihn schon selbst fragen oder im Support-Thread des Plugins schauen.. ;=)

lieber Gruss, Connie
|--

Das deutschsprachige GetSimple-(Unter-)Forum:   http://get-simple.info/forums/forumdisplay.php?fid=18
Reply
#6
Hallo,

die Site hat:
<meta charset="utf-8" />
und ist das leicht veränderte Template "AcidMind".

eine Änderung auf
<meta charset="UTF-8" />
hat leider nichts verbessert: Betreff und Von:
sind immer noch nicht vorzeigbar/lesbar.

Grüße und schönes Auspacken!
Reply
#7
Hallo Belletage, hallo Connie,

ich bin zeitlich gerade sehr knapp, daher die späte Antwort, und leider Spekulation statt Fakten (sprich: ungetestet).

Connie Wrote:Da Umlaute wenn kodiert mit einem ; enden, und das als Trennzeichen für mehrere Empfänger gedacht ist, ist klar, dass geteilt wird...
Ja, natürlich!

Das eigentliche Problem sind wohl zunächst mal nicht die Umlaute, sondern die Tatsache, dass das diese als HTML-Entities kodiert werden. Aus "ö" wird also "ouml;" etc. Das später dann base64 zu kodieren, hilft nicht. Nun konnte ich im Plugin (also in p01-contact.php) kein htmlentities() finden -- macht das evtl. Get-Simple???

Aber wie auch immer: im Zweifel sollte das für die E-Mail-Header rückgängig gemacht werden (und "sicherheitshalber" das UTF-8 auch in Großbuchstaben -- vermutlich egal, aber ich bin nicht sicher). Also p01-contact.php Zeile 724:

$name = '=?UTF-8?B?' . base64_encode(html_entity_decode($name)) . '?=';

(so wird zunächst "ouml;" wieder zu "ö", das dann anschließend "E-Mail-Header gerecht" kodiert wird)

Zum "charset": was im HTML-Quelltext steht, ist im Zweifelsfall nicht maßgeblich. Ausschlaggebender ist, was der Server als "Content-Type" sendet. Das kann man z.B. im Firefox sehen, wenn man "Extras->Live HTTP Headers" aktiviert. Was der Browser dann als "charset" annimmt, sieht man im Firefox unter "Ansicht->Zeichenkodierung" (ich glaube aber nicht, dass es daran liegt).

Belletage Wrote:(btw.: kennt der p01-contact-Autor das Problem nicht?)
Keine Ahnung. Der Autor ist Nicolas Liautaud <contact@nliautaud.fr>. Aber wo nun der Support-Thread des Plugins zu finden ist? -- ich kenn' mich leider hier auch noch nicht so gut aus.

Christoph
Reply
#8
Christoph,

der Support-Thread eines Plugins ist immer auf der Plugin-Seite notiert, in diesem Falle:

http://get-simple.info/forum/topic/1108/...your-pages

danke für deine Informationen!
|--

Das deutschsprachige GetSimple-(Unter-)Forum:   http://get-simple.info/forums/forumdisplay.php?fid=18
Reply
#9
hi Christoph, hi connie,
UTF-8 in Groß oder Klein ist egal ...
das "zusätzliche" html_entity_decode() bringt im SM-Mail-Klienten ein schwarzes Karo mit Fragezeichen - zumindest Mal was Anderes ... Smile
Danke für den Support-Thread-Link
viele Grüße, Bell.
Reply
#10
Hallo Connie, hallo Bell,

Connie Wrote:der Support-Thread eines Plugins ist immer auf der Plugin-Seite notiert
Danke für den Hinweis. :-) Der Link ist ja eigentlich nicht zu übersehen.

Belletage Wrote:das "zusätzliche" html_entity_decode() bringt im SM-Mail-Klienten ein schwarzes Karo mit Fragezeichen - zumindest Mal was Anderes ... Smile
Und auch der Hinweis auf einen Bug in meiner Änderung. Ein solches Zeichen wird nämlich immer dann dargestellt, wenn eine Bytefolge, die kein gültiges UTF-8 ist, als UTF-8 dargestellt werden muss. html_entity_decode() wandelt aber per Voreinstellung nach ISO-8859-1 (bei PHP < 5.4), und dann wird aus dem "ö" ein "\xF6". Für UTF-8 müsste es aber "\xC3\xB6" sein. Also müsste die Zeile lauten:

Code:
$name = '=?UTF-8?B?' . base64_encode(html_entity_decode($name), ENT_QUOTES, 'UTF-8') . '?=';

Ich hoffe, dass es so funktioniert. Ein (theoretisches?) Problem bliebe aber auch dann noch: solcherart kodierte Header dürfen nur eine bestimmte Länge haben (ich glaube 75 Zeichen). Das gäbe dann Probleme mit langen Namen. Wie das dann zu behandeln wäre, weiß ich aber nicht.

Christoph
Reply
#11
Habe Zeile 271
$tmp = htmlentities($tmp, ENT_QUOTES, 'UTF-8');
und 723
$subject = '=?utf-8?B?' . base64_encode($subject) . '?=';

einfach mal gelöscht, funzt perfekt, hoffe das hat sonst keine Auswirkungen, wer will kanns ja mal probieren.
Reply




Users browsing this thread: 1 Guest(s)