Wieder werden die Umlaute falsch dargestellt !


ComFreek

Mod | @comfreek
Moderator
Doch, es werden Daten ausgegeben!

Siehst du die zwei Zeilen nach dem schließenden PHP-Tag? Das sind vier Zeichen: CR LF CR LF. Hättest du das schließende PHP-Tag weggelassen, wäre das Problem nicht existent.
 

ComFreek

Mod | @comfreek
Moderator
Sorry, aber langsam werde ich von deiner Haltung, meine Beiträge nicht vollständig durchzulesen, genervt!
Siehe Beitrag 43!
 

ComFreek

Mod | @comfreek
Moderator
PHP-Dokumentation?
http://php.net/manual/en/function.header.php
PHP:
Remember that header() must be called before any actual output is sent, either by normal HTML tags, blank lines in a file, or from PHP. It is a very common error to read code with include, or require, functions, or another file access function, and have spaces or empty lines that are output before header() is called. The same problem exists when using a single PHP/HTML file.
ich hab diese Zeichen nicht gefunden!
Das sind auch Steuerzeichen: http://de.wikipedia.org/wiki/Steuerzeichen

Du brauchst einen Editor, der Steuerzeichen per Einstellung einblenden kann, z. B. Notepad++.
 

solala123

Erfahrenes Mitglied
Danke für deine Hilfe,
aber eins versteh ich immer noch nicht,
Der header muss als erstes aufgerufen werden, aber die php Datei für die cookies muss doch ganz am Anfang vor allen anderen stehen?
was hat jetzt das schließende ?> damit zu tun?
Vielleicht bist du schon jetzt zu genervt oder die Frage ist doof, ich weiß es nicht
hab nachsicht mit einem alten Mann ;)
 

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]