Wieder werden die Umlaute falsch dargestellt !

ComFreek

Mod | @comfreek
Moderator
Dazu müsstest du wissen, wie eine HTTP-Nachricht (Anfrage ["Request"] oder bei dir v. a. die Antwort ["Response"]) aufgebaut ist.
Ein Auszug aus dem Wikipediaartikel über HTTP: http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Example_session
Code:
HTTP/1.1 200 OK
Date: Mon, 23 May 2005 22:38:34 GMT
Server: Apache/1.3.3.7 (Unix) (Red-Hat/Linux)
Last-Modified: Wed, 08 Jan 2003 23:11:55 GMT
ETag: "3f80f-1b6-3e1cb03b"
Content-Type: text/html; charset=UTF-8
Content-Length: 131
Accept-Ranges: bytes
Connection: close

<html>
<head>
  <title>An Example Page</title>
</head>
<body>
  Hello World, this is a very simple HTML document.
</body>
</html>
Zuerst kommt die HTTP-Version inkl. Statuscode, dann die einzelnen Header und schließlich das eigentliche Dokument, hier ein HTML-Dokument.
Diese Reihenfolge muss so eingehalten werden!
Cookies werden auch in Headern transportiert.
Wenn du nun in PHP per echo() oder einfach außerhalb der PHP-Tags (vor <?php oder nach ?>) etwas ausgibst, dann kannst du danach keinen Header mehr setzen, da zum Zeitpunkt der Dokumentenausgabe die Header schon aufgrund der festen Reihenfolge gesendet werden mussten.

Die Reihenfolge der Header ist egal (sofern du nicht gleichnamige mehrfach sendest, siehe hier), d. h. ob du zuerst die Cookies setzt oder den Content-Type Header spielt keine Rolle.
Du hast die Cookies in einer separaten Datei "cookie_umschaltung.php" gesetzt. Nach Ausführung dieser Datei (per include()) wolltest du den Content-Type Header setzen. Allerdings fand am Ende der "cookie_umschaltung.php" eine Ausgabe statt. Im Speziellen war der Grund jener, dass du nach dem schließenden PHP-Tag noch - wenn auch unsichtbare bzw. nur als Zeilen sichtbare - Zeichen hattest. Somit konntest du danach den Content-Type nicht mehr setzen. Dies geschah zu all deinem Pech auch noch ohne Fehlermeldung, da du die Fehler nicht aktiviert hast.

Wir merken uns:

- Schließende PHP-Tags einfach weglassen! Somit kann keine "merkwürdige" Ausgabe stattfinden.
- Alle Fehlermeldungen in der Entwicklungsphase immer aktivieren!
- Steuerzeichen können mit einigen Editoren extra dargestellt werden, um sie zu finden.
 

solala123

Erfahrenes Mitglied
Hallo ComFreeh,
Danke für den ausführlichen Unterricht, soweit hab ich es begriffen,

- Schließende PHP-Tags einfach weglassen! Somit kann keine "merkwürdige" Ausgabe stattfinden.
Ist es denn nicht so, dass der "Interpreter" zuerst das öffnente <?php sieht und danach das schließende ?> sucht und dann den php Code abarbeitet? (so findet man es doch in Lehrvideos)

2. kann man das schließende ?> IMMER weg lassen? oder jetzt nur in meinem speziellen Fall mit der "cookie_umschaltung.php"

Vielen Dank nochmals für Deine Gedult :)
Gruß
Rainer
 

ComFreek

Mod | @comfreek
Moderator
Hallo Rainer,

der/das (?) schließende PHP-Tag ist immer optional! Der PHP-Bereich gilt dann bis zum Dateiende. So handhaben es fast alle großen PHP-Frameworks.

Willst du aber eine Datenausgabe haben und dies nicht per echo vollziehen, dann brauchst du es:
PHP:
<?php
// PHP-Code
?>HTML oder irgendetwas anderes
HTML oder irgendetwas anderes
HTML oder irgendetwas anderes


PS: Du hast es auf meine Liste falsch geschriebener Versionen meines Nicknames geschafft:
• ComFreak (mit "ae")
• CompFreek
• ComicFreek
• CornFreek
• ComFreeh
 

SpiceLab

ZENmechanic
[offtopic]
PS: Du hast es auf meine Liste falsch geschriebener Versionen meines Nicknames geschafft:
• ComFreak (mit "ae")
• CompFreek
• ComicFreek
• CornFreek
• ComFreeh
Eine weitere "Interpretation" fehlt in der Liste noch:
ComFreek hat gesagt.:
Hallo sheel,

alles Gute zum 0x1B58. Beitrag ;)

Viele Grüße
ComFreke
Man ist eben nie selbst vor Tippfehlern gefeit :D
[/offtopic]