UTF-8 beim Speichern und Emailversand
myAlexander
- html
Hallo @all,
ich speichere über einen PHP-Schnittstelle (fopen, fwrite) deutsche, englische und russische Texte ab jeweils in einem gewöhnlichen txt-File ab.
Bei den russischen Texten habe ich das Problem, das diese Inhalte nicht korrekt ausgelesen werden (kryptische Sonderzeichen) und ich vermute, das dies daran liegt, dass ich das UTF-8-Format nicht beim speichern berücksichtige (wie z.B. beim Arbeiten mit UniRed).
Was muss ich tun, damit diese txt-Files im UTF-8-Format abgespeichert werden?
Als Zweites versende ich bei der Anmeldung an einem geschlossenen Bereich eine dreisprachige HTML-Bestätigungs-Email via phpmailer-Klasse. Auch hier ist das Problem, das der russische Part der HTML-Mail nur als kryptische Sonderzeichen dargestellt wird. Kennt jemand die phpmailer-Klasse und hat mir hier vielleicht eine Idee, wie ich die META-Angabe für die UTF-8-Formatierung hinzufügen kann? In den Public Variables wird dies hier definiert:
var $CharSet = "iso-8859-1";
Reicht es, die Angabe durch UTF-8 zu ersetzen? Oder muss ich sie hinzufügen?
var $CharSet = "UTF-8";
Viele Grüße
Alexander
Hallo myAlexander.
Was muss ich tun, damit diese txt-Files im UTF-8-Format abgespeichert werden?
Entweder iconv_set_encoding nutzen oder utf8_encode auf die zu schreibende Zeichenkette anwenden.
Einen schönen Dienstag noch.
Gruß, Ashura
echo $begrüßung;
Bei den russischen Texten habe ich das Problem, das diese Inhalte nicht korrekt ausgelesen werden (kryptische Sonderzeichen)
Definiere "kryptische Sonderzeichen". Welche Kodierung verwendet der Editor / das Anzeigeprogramm, dass du verwendest, wenn du die "kryptischen Sonderzeichen" siehst?
und ich vermute,
Das ist schon mal schlecht.
Informiere dich darüber, wie Zeichen in UTF-8 kodiert werden.
Was muss ich tun, damit diese txt-Files im UTF-8-Format abgespeichert werden?
Ermittle welche Kodierung vorliegt und wandle gegebenenfalls die Kodierung um. Für letzteres hat dir Ashura schon Tipps gegeben.
var $CharSet = "iso-8859-1";
Reicht es, die Angabe durch UTF-8 zu ersetzen? Oder muss ich sie hinzufügen?
var $CharSet = "UTF-8";
Würde es reichen, einen englischen Text mit "Französisch" zu überschreiben?
echo "$verabschiedung $name";
Moin!
Bei den russischen Texten habe ich das Problem, das diese Inhalte nicht korrekt ausgelesen werden (kryptische Sonderzeichen) und ich vermute, das dies daran liegt, dass ich das UTF-8-Format nicht beim speichern berücksichtige (wie z.B. beim Arbeiten mit UniRed).
Wo kommen die Texte her, technisch gesehen? Formular? Dann mußt du das Formular zwingend schon auf UTF-8 umstellen, sonst gehen dir die russischen Zeichen unrettbar verloren, wenn sie beim Versuch, ISO-8859-1 zu senden, in Fragezeichen gewandelt werden, oder in Entities.
PHP selbst kann zwar noch nicht sehr gut mit UTF-8 umgehen, aber UTF-8 bildet auch nur einen String, in dem manche fertigen Buchstaben eben zwei oder mehr Zeichen lang sind. Wenn man die nicht aus Versehen auftrennt, stellt PHP absolut kein Problem dar. Wichtig ist nur, dass der Browser schon UTF-8 sendet.
var $CharSet = "iso-8859-1";
Reicht es, die Angabe durch UTF-8 zu ersetzen? Oder muss ich sie hinzufügen?
Ersetzen und dann natürlich auch benutzen.
Gilt übrigens für alle genannten Sprachen. Russisch sollte bei deinem System keine Ausnahmestellung einnehmen, UTF-8 ist für alle da.
- Sven Rautenberg
Hallo Sven,
Wo kommen die Texte her, technisch gesehen? Formular? Dann mußt du das Formular zwingend schon auf UTF-8 umstellen, sonst gehen dir die
Korrekt, Eingabe über ein Formular. Das sähe dann so aus?
<form action="xyz.php" method="get" accept-charset="UTF-8">
var $CharSet = "UTF-8";
Reicht es, die Angabe durch UTF-8 zu ersetzen? Oder muss ich sie hinzufügen?Ersetzen und dann natürlich auch benutzen.
Also ich kann über UTF-8 deutsch, englisch und russisch senden...
Danke für die Infos!
Alexander
Moin!
Wo kommen die Texte her, technisch gesehen? Formular? Dann mußt du das Formular zwingend schon auf UTF-8 umstellen, sonst gehen dir die
Korrekt, Eingabe über ein Formular. Das sähe dann so aus?
<form action="xyz.php" method="get" accept-charset="UTF-8">
Das "reicht" aber bei manchen Browsern noch nicht. Um wirklich 100% sicher zu gehen, ist es vermutlich erforderlich, zwingend auch UTF-8 im HTTP-Header zu senden und ein gleichlautendes Meta-Tag in den Head aufzunehmen.
- Sven Rautenberg