PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Ő in Textdatei schreiben



The Saint!
13.02.2012, 15:20
Hallo liebe Leute!

Ich habe folgendes Problem:

Ich habe ein kleines PHP Programm mit dem ich eine HTML Datei erstellen möchte.

Das problem ist allerdings, dass sich bei den Eingaben um ungarische Zeichen Handelt. Wie ihr vielleicht wisst hatdas ungarische Alphabet erweiterte Zeichen wie Ő und ű usw.

Die oben genannten Zeichen also Ő ő Ű ű
Sind das auch schon das Problem.
Die standart Zeichen kann ich ja ersetzen mit :


$ent = array('À'=>'À', 'à'=>'à', 'Á'=>'Á', 'á'=>'á', 'Â'=>'Â', 'â'=>'â', 'Ã'=>'Ã', 'ã'=>'ã', 'Ä'=>'Ä', 'ä'=>'ä', 'Å'=>'Å', 'å'=>'å', 'Æ'=>'Æ', 'æ'=>'æ', 'Ç'=>'Ç', 'ç'=>'ç', 'Ð'=>'Ð', 'ð'=>'ð', 'È'=>'È', 'è'=>'è', 'É'=>'É', 'é'=>'é', 'Ê'=>'Ê', 'ê'=>'ê', 'Ë'=>'Ë', 'ë'=>'ë', 'Ì'=>'Ì', 'ì'=>'ì', 'Í'=>'Í', 'í'=>'í', 'Î'=>'Î', 'î'=>'î', 'Ï'=>'Ï', 'ï'=>'ï', 'Ñ'=>'Ñ', 'ñ'=>'ñ', 'Ò'=>'Ò', 'ò'=>'ò', 'Ó'=>'Ó', 'ó'=>'ó', 'Ô'=>'Ô', 'ô'=>'ô', 'Õ'=>'Õ', 'õ'=>'õ', 'Ö'=>'Ö', 'ö'=>'ö', 'Ø'=>'Ø', 'ø'=>'ø', 'Œ'=>'Œ', 'œ'=>'œ', 'ß'=>'ß', 'Þ'=>'Þ', 'þ'=>'þ', 'Ù'=>'Ù', 'ù'=>'ù', 'Ú'=>'Ú', 'ú'=>'ú', 'Û'=>'Û', 'û'=>'û', 'Ü'=>'Ü', 'ü'=>'ü', 'Ý'=>'Ý', 'ý'=>'ý', 'Ÿ'=>'Ÿ', 'ÿ'=>'ÿ');

strtr($output, $ent)


ŐőŰűHaben allerdings keine entsprechenden HTML Zeichen.

Wie gehe ich nun vor?

Um es hervorzuheben:
Es geht nicht darum, dass der Header des HTML dokuments falsch ist.
Bei der Vorschau, also wo der Text mittels

echo()
ausgeben wird, werden alle Zeichen korrekt dargestellt, da ich den Header mittels:

header('Content-type: text/html; charset=utf-8');
Richtig gesetzt habe.

Das Problem liegt beim schreiben der HTML Datei auf den Server.
Wenn ich die HTML Datei öffne werden die obigen 4 Zeichen nicht richtig dargestellt obwohl im Header der HTML Datei das

'<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />';

vorhanden ist.

Google habe ich auch schon gefrat auf Ungarisch, Deutsch und Englisch aber das Problem scheint unlösbar zu sein...

Ich möchte hinzufügen, dass es auch akzeptabel ist wenn die Datei eine einfache TXT datei ist, wo die Zeichen kodiert sind und ich die Datei später mit einem PHP Script öffnen kann. Hauptsache der HTML-Code ist korrekt und enthält die korrekt Zeichen.

Damit ihr auch wisst worum es geht:
Es geht darum, dass ein Benutzer einen Art Fragebogen ausfüllt. Nachdem der Benutzer den Fragebogen ausgefüllt aht, wird zunächst eine Vorschau generiert. Bis hierhin funktioniert auch alles gut. Danach wird diese Vorschau, die aus einem HTML Dokument besteht auf dem Server abgelegt.
Der Fragebogen ist so eine Art "Maske", die man braucht damit die Informationen immer gleich Angezigt werden.

SFX
13.02.2012, 16:40
http://de2.php.net/manual/en/function.htmlentities.php
Sollte das alles hinbekommen.

Freak1936
13.02.2012, 17:03
Ich bin mir nicht sicher, aber ich mein das solltest du mit dem charset lösen. Ich hab die charsets jetzt nicht im Kopf, doch wenn ich mich nicht irre sind bei UTF-8 auch keine Umlaute wie ä,Ä,ö,Ö und so weiter dabei.
Der charset für das deutsche Alphabet ist ISO-8859-1 oder ISO-8859-15, da gibt es doch bestimmt auch einen bestimmten charset für das ungarische ;)

The Saint!
14.02.2012, 00:09
Danke für eure Antworten.

Ihr zeigt schon in die richtige Richtung, das was ihr schreibt habe ich mir auch schon gedacht, jedoch ist es so, dass das Problem nicht an der HTML Ausgabe an sich liegt.

Wenn ich das Dokument per Echo ausgebe, das heißt die Daten die per $_POST übergeben werde per echo ausgebe, werden diese Korrekt angezeigt.
Das Problem liegt bei der schreiben der Datei. Um es mal konkret zu zeigen, ihr könnt es vielleicht sogar ausprobieren:

Benutzer füllt ein Formular aus z.b.

Frage1 = Öltöző (Öltöző bedeutet Umkleide, grad nichts besseres eingefallen=

So, das wird nun per POST übergeben. Im zweiten PHP Script habe ich nun zugriff per:

$_POST["Frage1"]

setze ich den Header nun zuerst per:

header('Content-type: text/html; charset=utf-8');

und schreibe dann:


echo $_POST+++91;"Frage1"+++93;

ist die Ausgabe:

Öltöző

Bis hierhin passt auch alles. Jetz möchte ich aber das Wort in eine Datei schreiben:

$fh = fopen($myfile,'w');
fwrite($fh,"Öltöző");
fclose($fh);

Ist die Ausgabe:
Öltöző

Probiert es mal selbst aus, dieser Script sollte funktionieren:



header('Content-type: text/html; charset=utf-8');
$output = fő;
echo $output;
$myFile = 'test.html';
$fh = fopen($myFile, 'w') or die("can't open file");
fwrite($fh, $output);
fclose($fh);
öffnet nun test.html und ihr werdet sehen, dass es nicht funktioniert hat, beim echo jedoch schon.

Eigentlich wäre der korrekte charset für ungarisch ISO-8859-2 aber das funktioniert auch nicht.

inout
14.02.2012, 00:29
Probier mal Folgendes:


fwrite($fh, pack('CCC', 0xef, 0xbb, 0xbf) . $output);
oder
fwrite($fh, "\xEF\xBB\xBF" . $output);

http://en.wikipedia.org/wiki/Byte_order_mark