Andreas-Lindig: 'header()' = <head></head> ?

Hallo Forum,

weiß nicht genau, ob der Themenbereich stimmt...

jetzt wurde mir hier neulich geraten für die Zeichendatenübertragung - also für ein Forum - folgenden Header in PHP zu benutzen:
header("Content-Type: text/html; ccharset=ISO-8859-1");

es gibt aber die gleiche Angabe auch in HTML:
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">

Meine Fragen:
1. bewirken die Angaben das gleiche? und wenn nein: was ist der Unterschied?
2. wenn man ein Frameset mit Seiten drin hat, muß '<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">' im Head des Frameset stehen oder in den jeweiligen Seiten oder beides oder egal?

vielen Dankeschön und frohe Weihnachten, Andreas
          °        °
    °             °
     °     *        °
          ***
         *****   °
        *******       °
       ****** **
       *********          °
     *************
       ** ******
    ****** ** *****
      ************
          | |           °
          | |          °
    ^^^^^^^°^°°°          °

  1. Hi,

    jetzt wurde mir hier neulich geraten für die Zeichendatenübertragung - also für ein Forum - folgenden Header in PHP zu benutzen:
    header("Content-Type: text/html; ccharset=ISO-8859-1");

    es gibt aber die gleiche Angabe auch in HTML:
    <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">

    1. bewirken die Angaben das gleiche? und wenn nein: was ist der Unterschied?

    Nein. header(...) ist für alle Typen von Ressourcen geeignet. <meta...> aber nur für HTML.
    Die header-Funktion schreibt den String in den http-header, der noch vor der eigentlichen Ressource (z.B. HTML-Seite) übertragen wird.
    Wenn Dein PHP aber beispielsweise eine Text-Datei ausgeben soll, MUSS die header-Funktion benutzt werden, um den content-type auf text/plain  zu setzen, da im einfachen Text ja kein meta möglich ist.
    Abgesehen davon bewirken Deine Beispiele auch schon deshalb nicht das gleiche, wei das PHP-Beispiel kein charset definiert (nur ein ccharset ;-) )
    Ansonsten bewirkt die meta-Angabe __für HTML-Ressourcen__ das selbe wie die PHP-header-Funktion

    1. wenn man ein Frameset mit Seiten drin hat, muß '<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">' im Head des Frameset stehen oder in den jeweiligen Seiten oder beides oder egal?

    Sowohl die header-Information von PHP als auch die meta-Elemente im HTML gelten jeweils nur für die eine Ressource.
    HTTP (das Übertragungsprotokoll) ist zustandslos, die Übertragung der Frameset-Ressource hat keinerlei Zusammenhang mit der Übertragung der im Frameset dargestellten Ressourcen.
    cu,
    Andreas

    --
    Der Optimist: Das Glas  ist halbvoll.  - Der Pessimist: Das Glas ist halbleer. - Der Ingenieur: Das Glas ist doppelt so groß wie nötig.
    1. Hallo MudGuard

      Wenn Dein PHP aber beispielsweise eine Text-Datei ausgeben soll, MUSS die header-Funktion benutzt werden, um den content-type auf text/plain  zu setzen, da im einfachen Text ja kein meta möglich ist.

      Ich schreibe auch Textdateien mit PHP - ist da so ein Header immer nötig, oder nur in bestimmten Fällen. Bisher mache ich das ohne irgendwas.

      Abgesehen davon bewirken Deine Beispiele auch schon deshalb nicht das gleiche, wei das PHP-Beispiel kein charset definiert (nur ein charset ;-)

      danke für der Hinweis - ist aus meiner Originaldatei kopiert :-)

      Ansonsten bewirkt die meta-Angabe __für HTML-Ressourcen__ das selbe wie die PHP-header-Funktion

      also es reicht: ENTWEDER header() ODER <meta... > ???

      danke schön, Andreas

      1. Hi,

        Hallo MudGuard

        Wenn Dein PHP aber beispielsweise eine Text-Datei ausgeben soll, MUSS die header-Funktion benutzt werden, um den content-type auf text/plain  zu setzen, da im einfachen Text ja kein meta möglich ist.
        Ich schreibe auch Textdateien mit PHP - ist da so ein Header immer nötig, oder nur in bestimmten Fällen. Bisher mache ich das ohne irgendwas.

        Immer dann, wenn der content-Type nicht text/html ist (weil PHP text/html mitsendet, wenn man nichts anderes einstellt) und Du Deine Daten über http abrufst.
        Klar, beim IE fällt der Unterschied nicht auf, weil der http nicht richtig macht, aber bei richtigen Browsern ist die Reaktion abhängig vom Content-Type.
        Schick einem Mozilla eine HTML-Datei mit Content-Type text/html, wird das HTML interpretiert, schickst Du aber Content-Type text/plain, wird der QUelltext angezeigt.

        Abgesehen davon bewirken Deine Beispiele auch schon deshalb nicht das gleiche, wei das PHP-Beispiel kein charset definiert (nur ein charset ;-)

        Ups, da hatte ich ja ein c vergessen. Hab mich wohl unterbewußt geweigert, das falsch zu schreiben...

        also es reicht: ENTWEDER header() ODER <meta... > ???

        Bei HTML-Ressourcen: ja
        Bei anderen Ressourcen: da hast Du keine Wahl, da mußt Du header nehmen.
        cu,
        Andreas

        --
        Der Optimist: Das Glas  ist halbvoll.  - Der Pessimist: Das Glas ist halbleer. - Der Ingenieur: Das Glas ist doppelt so groß wie nötig.
        1. Hallo ihr beiden mit dem Namen Andreas,

          Bei HTML-Ressourcen: ja

          Sorry, aber dem muss ich widersprechen. Wenn der Server kein Charset im HTTP-Header mit ausliefert, dann _dürfen_ bis zur <meta>-Angabe _keine_ nichtkodierten nicht-ASCII-Zeichen kommen. Wenn der Server einen Charset mitschickt, dann ist das dagegen erlaubt.

          Ich empfehle generell den Header, weil die <meta>-Angabe erst extra geparsed werden muss, der HTTP-Header muss sowieso immer verarbeitet werden.

          Grüße,

          Christian

          --
          Ich bitte darum, dass ein Themenbereich (BARRIEREFREIHEIT) eingerichtet wird.
          1. Hi,

            Bei HTML-Ressourcen: ja

            Sorry, aber dem muss ich widersprechen. Wenn der Server kein Charset im HTTP-Header mit ausliefert, dann _dürfen_ bis zur <meta>-Angabe _keine_ nichtkodierten nicht-ASCII-Zeichen kommen. Wenn der Server einen Charset mitschickt, dann ist das dagegen erlaubt.

            Stimmt.
            Ich setze dieses Meta-Element immer als allererstes Teil ins head-Element, vorher stehen also nur doctype, <html> und <head>, also alles unkritische Zeichen. Auf die perverse ;-) Idee, dieses Meta weiter hinten zu setzen, wär ich gar nicht gekommen ;-)

            Ich empfehle generell den Header, weil die <meta>-Angabe erst extra geparsed werden muss, der HTTP-Header muss sowieso immer verarbeitet werden.

            Manchmal (bei statischen HTML-Dateien und nicht-selbst-konfigurierbarem Webserver) hat man aber keine Möglichkeit, den http-header zu beeinflussen.

            cu,
            Andreas

            --
            Der Optimist: Das Glas  ist halbvoll.  - Der Pessimist: Das Glas ist halbleer. - Der Ingenieur: Das Glas ist doppelt so groß wie nötig.