# Umlaute speichern und anzeigen



## arreis (4. August 2011)

Hallo zusammen,
in meinem momentanem Projekt sollen einige Leute die Möglichkeit haben aktuelle Informationen direkt auf die Seite zu stellen. Dies geschieht über eine Textarea und wird dann mit php gesendet. Genau genommen wird eine Text.txt mit neuem Inhalt gefüllt. Bis hier funktioniert alles so wie es soll.

Wenn ich nun im Firefox z.B. Mühelos eingebe, wird das so gespeichert und auch wiedergegeben, die Wiedergabe ist dann auch im IE 8 so wie sie eingegeben worden ist.

Wenn ich das jetz aber im IE eingebe werde die Umlaute zu kleinen Kästchen und Teile des Textes gehen verloren. oder aber der Text wird nicht mehr angezeigt. In Firefox werden statt der Umlaute ? angezeigt.

Hat vielleicht jemand eine Idee woran das liegen kann?

UTF-8 Habe ich schon überall eingebaut wo es hin kann bzw.sollte.

Gruß arreis


----------



## kalterjava (5. August 2011)

Hi,

vielleicht hilft dir auch mein Thread:
http://www.tutorials.de/html-xhtml/...ichert-wird-jedoch-firefox-nicht-erkannt.html

Evtl. gibt es Probleme mit BOM. Kannst ja mal testen, ob dieser in deinen Dateien enthalten ist.
Ich hab da mal im Netz ein VB-Script gefunden, das dir den sogar entfernt, wenn einer enthalten ist.
Google einfach mal danach. In DreamWeaver kann man z.B. einstellen, ob mit oder ohne BOM gespeichert werden soll. 
Wenn du jedoch nur mal kurz eine .txt im Windows-Editor lädst und speicherst, wird autom. der BOM gesetzt, der dadurch das Metatag utf-8 aushebelt.

Viele Grüße


----------



## arreis (5. August 2011)

Das Problem liegt aber aus meiner Sicht beim senden des Textes im IE. Firefoxmacht das so wie es sein soll und die *.txt die über Firefox geändert wird, wird im IE ja auch richtig angezeigt.


----------



## ComFreek (5. August 2011)

So ein ähnliches Problem hatte ich auch mal.

Versuche mal die Daten per PHP in UTF-8 mit [phpf]utf8_encode[/phpf] zu konvertieren.


Außerdem:

Setzt du den Charset per Meta-Tag?
Gibst du die Html-Datei per UTF-8 aus?


----------



## arreis (5. August 2011)

Wenn ich utf8_encode verwende funktioniert es im IE aber nicht mehr in Firefox.
Ein identisches Ergebniss in beiden Browsern erhalte ich, wenn ich utf8_decode verwende, dabei werde dann die Umlaute als ? dargestellt.

Den Charset habe ich im Meta-Tag. Ich muss leider zugeben, dass ich nicht weiss, was Du damit meinst die Html-Datei per UTF-8 auszugeben.

Ich gehe im Moment davon aus, dass man die PHP-Datei so schreiben muss, dass beim IE so und bei Firefox anders übergeben werden muss.

Macht man sowas mit If und else?

Gruß arreis


----------



## ComFreek (5. August 2011)

> Den Charset habe ich im Meta-Tag. Ich muss leider zugeben, dass ich nicht weiss, was Du damit meinst die Html-Datei per UTF-8 auszugeben.


Ich meine den Zeichensatz, mit dem die Datei zum Browser übermittelt wird.
Das wird meistens durch den Server(-software) geregelt, aber du kannst folgendes versuchen:

```
header('Content-Type: text/html; charset=utf-8');
```
Das sollte vor jedem echo() oder andere Ausgabe stehen.



> Ich gehe im Moment davon aus, dass man die PHP-Datei so schreiben muss, dass beim IE so und bei Firefox anders übergeben werden muss.
> 
> Macht man sowas mit If und else?


Einen Workaround nur für einen Browser zu basteln, sollte nicht nötig sein.

Mit IF und ELSE kann man je nach Bedingung (true oder false) Befehle ausführen, z.B.:

```
$i = 9;

if ($i == 9)
{
  echo '$i ist 9!';
}
else
{
  echo 'Fehler!';
}
```


----------



## arreis (6. August 2011)

Es gibt da, aus meiner sicht, noch eine Merkwürdigkeit. Ich habe ja schon geschrieben, dass die *.txt in Firefox richtig angezeigt wird wenn in dem php-script ohne utf8_encode bzw.de_code gearbeitet wird, der IE hingegen kleine Kästchen hervorruft.
Wenn ich nun die *.txt zurück auf meinen Rechner lade, einmal öffne und wieder zurückschicke,werde auch im IE die Umlaute angezeigt.


----------



## ComFreek (6. August 2011)

Ja, das ist ein klarer Fehler von Zeichensätzen & Kodierungen.

Folgender Code funktioniert getestet bei mir in Chrome, IE (v9), FF:

```
<?php

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

if ( isset($_POST['content']) )
{
  file_put_contents('file.txt', $_POST['content']);
  die( header('Location: test.php') );
}

?>
<!doctype html>
<html>
  <head>
    <title></title>
  </head>
  
  <body>
    <form action="" method="post">
      <textarea name='content'><?php echo htmlentities(@file_get_contents('file.txt'), ENT_QUOTES, "UTF-8"); ?></textarea>
      <br />
      <input type="submit" value="Speichern!" />
    </form>
  </body>
</html>
```


----------



## arreis (7. August 2011)

Erstmal Danke für Deine Bemühungen aber das ist es auch nicht. Im Grunde ist mit dem Code genau so,als hätte man kein Charset angegeben. Habe das extra mal auf einem anderem Rechner getestet.


----------



## kalterjava (9. August 2011)

Darf ich noch einmal diesen Satz hier anbringen wie oben?

"Wenn du jedoch nur mal kurz eine .txt im Windows-Editor lädst und speicherst, wird autom. der BOM gesetzt, der dadurch das Metatag utf-8 aushebelt."
Dabei reicht es, wenn irgendeine Datei das BOM enthält, dass der Zeichensatz falsch interpretiert wird. Deshalb nie .txt Dateien im einfachen Windows-Editor öffnen und speichern.

Und tu uns mal bitte einen gefallen und poste die exakte Angabe der Zeichencodierungen der Browser. Also welche diese automatisch einstellen bzw. erkennen. Und zwar im Zustand des 1. Aufrufs der Seite und einmal, wenn ein User Text eingibt und diesen auf die Seite setzt.

Beim FF ist das über ANSICHT - ZEICHENCODIERUNG ablesbar.
Die Tutorial-Seite ist z.B. in ISO-8859-1 codiert.





arreis hat gesagt.:


> Es gibt da, aus meiner sicht, noch eine Merkwürdigkeit. Ich habe ja schon geschrieben, dass die *.txt in Firefox richtig angezeigt wird wenn in dem php-script ohne utf8_encode bzw.de_code gearbeitet wird, der IE hingegen kleine Kästchen hervorruft.
> Wenn ich nun die *.txt zurück auf meinen Rechner lade, einmal öffne und wieder zurückschicke,werde auch im IE die Umlaute angezeigt.


----------



## arreis (14. August 2011)

Das Problem liegt anscheinend ganz wo anders. Wenn ich ein Sript ausführe dann funktioniert es im IE und in Firefox. WEnn ich allerdings eine Passwortabfrage davor setze, dann funktioniert es nicht mehr.


----------



## kalterjava (14. August 2011)

So lange du uns nicht zeigst um was wir dich bitten, wirst du mit dem Problem wohl alleine leben müssen. Trotzdem noch ein Tipp von mir.
Fang ein neues Projekt an. Dateien UTF-8 codiert ohne BOM.
Dann nimmst du ein Dummytext mit Umlauten und überprüfst im IE und im FF ob diese die Seite richtig mit Umlauten darstellen. Wenn ja, dann sichere diesen Stand unter einem anderen Namen (auf das kannst du dann jederzeit zurückgreifen). Jetzt fügst du ein Script nach dem anderen ein und prüfst jedesmal ob es dadurch Probleme bei den Browsern gibt.
So würde ich vorgehen, um das Problemscript ausfindig zu machen.


----------

