verfügbare Zeichenkodierung(en) auf dem Server?

Hallo,
gibt es eine Möglichkeit, mit PHP die auf dem Server verfügbare(n) Zeichenkodierung(en) herauszubekommen?

Die zu dieser Frage gehörende Problemstellung ist folgende:

Ich möchte ein Kontaktformular erstellen, welches ohne großartige Änderungen im Quelltext auf jeden beliebigen Server laufen soll. Nun ist auf dem einen Server aber nur noch die Codetabelle UTF-8 installiert, während auf dem anderen nur ISO-8859-2 verfügbar ist. Und ein dritter arbeitet vielleicht standardmäßig mit Windows-1252, hat aber auch UTF-8 istalliert.

Also muss ich eine dem verfügbaren Zeichensatz entsprechende Angabe im header des HTML-Quelltextes generieren und an den entsprechenden Stellen im HTML-Quelltext angeben (charset-Meta bzw. accept-charset im -Tag). Sonst gibt es Kuddelmuddel in der Zeichendarstellung der Antwortmail (Murks bei Umlauten etc.).

Selbst immer den Quelltext je nach Verfügbarkeit zu ändern oder den Wert aus einer Datenbank ähnlichen Datei auszulesen, ist nicht möglich. Denn dieses Script schreibe ich nicht für mich, sondern für Leute, die teilweise nicht einmal wissen, was Zeichenkodierungen sind und wozu diese da sind. Von diesen Leuten kann ich nicht mehr erwarten, als dass sie ihre eigene Email-Adresse ins Script eingefügt bekommen.

Für Hilfe danke ich schon im Voraus.

Gruß
Kira-Bianca

Hallo,
gibt es eine Möglichkeit, mit PHP die auf dem Server
verfügbare(n) Zeichenkodierung(en) herauszubekommen?

die frage ist falsch. php kann immer alle zeichencodierungen ausgeben.

du einfach header(„Content-type: …; charset=$DEINCHARSET“)
und fuer html evtl. noch ein

Hallo Jörg,
entschuldige bitte, dass ich erst heute auf Deine Antwort reagiere. Ich habe wie jedes Frühjahr zurzeit wieder mit dem Wetterumschwung zu kämpfen und massive Kreislaufprobleme.

Leider reicht mir Deine Antwort nicht aus, weil sie nicht den Kern des Problemes trifft. Dass PHP (bzw. das Modul) in der Lage ist, mit jeder Kodierung zu arbeiten, ist mir klar. Denn es wird ja letztlich vom PHP-Modul nur jedes Bit wie vom Server geliefert ungeachtet des Zusammenhangs weitergegeben und erst der Empfänger (Browser) betrachtet es wieder mit dem Aspekt der Zeichenkodierung.

Jedoch kann ich nur mit auf dem Server verfügbaren Zeichencodes arbeiten, weil ich diese den Browser mitteilen muss. Wenn nicht explizite Angaben über den verwendeten charset an den Browser gehen, gibt es u. U. Kuddelmuddel. Es müssen also Angaben des verwendeten charsets im header des Dokuments, als Meta-Angabe im des Quelltextes und im accept-charset des Formulars angeben werden.

Aber die Meta-Angabe MUSS mit dem Format des Dokuments übereinstimmen, wie es auf dem Server liegt, also ein auf dem Server verfügbarer Zeichencode sein. Speichere ein Mal eine HTML-Seite im Format UTF-8 ab (z. B. mit dem Microsoft Editor, der kann das) und gebe in den Metas ein charset z. B. ISO-8859-2 an. Der Browser macht jede Menge Murks bei allen deutschen Sonderzeichen.

Und wenn der Server UTF-8 nicht kennt, beginnt der ganze Quelltext sogar gleich am Anfang mit vier undefinierbaren Zeichen (Steuerzeichen für UTF-8). Damit ist dann auch eine für den Browser gedachte Änderungen der header-Angabe mit geänderter Zeichenkofdierung unmöglich, weil diese 4 Zeichen sofort quasi noch vor Aufruf von PHP in die Ausgabe für den Browser gestellt werden. Und wie Dir vermutlich ebenfalls bekannt ist, ist ein Ändern des Headers mit der Funktion header() nach einer Ausgabe unzulässig und wird nicht mehr durchgeführt.

Was ich also benötige ist eine Funktion in der Art present_charset() oder eine Möglichkeit, durch das Öffnen/Lesen eines auf dem Server schon vorhandenen Dokuments die dort verwendete Kodierung herauszubekommen.

Der HTML-Validator vom W3C zum Beispiel gibt doch an, in welchem Format er die Webseiten erhält, ungeachtet der im Quelltext gemachten Angaben. Ich vermute, er nutzt dafür die Angaben, wie er sie aus dem vom Server gesendeten Dokumenten-Header erhält, also genau das, was ich benötige. Gibt es von PHP aus eine Möglichkeit, diese Angaben auszuwerten?

Viele Grüße
Kira-Bianca

Dass PHP (bzw. das Modul) in der
Lage ist, mit jeder Kodierung zu arbeiten, ist mir klar. Denn
es wird ja letztlich vom PHP-Modul nur jedes Bit wie vom
Server geliefert

stop der server liefert das aus, was von php ausgegeben wird.

Jedoch kann ich nur mit auf dem Server verfügbaren
Zeichencodes arbeiten

es gibt keine auf dem server verfuegbaren zeichencodes. evtl. solltest du darlegen, was du damit meinst.

Und wenn der Server UTF-8 nicht kennt, beginnt der ganze
Quelltext sogar gleich am Anfang mit vier undefinierbaren
Zeichen (Steuerzeichen für UTF-8).

klingt spektakulaer.
mit welchem browser testest du das?

wenn der server die seite mit einem header „Content-type: text/plain; charset=iso-xxx“ ausliefert, koennte ich mir das vorstellen. dem kannst du aber entgegentreten, indem du als allererstes in dein script eine zeile:

<?php header("Content-type: was mit utf8"); ?><?xml blubber...>

ausgibst.

du solltest die ausgabe mit z.b. livehttpheaders pruefen.

weiter waere es moeglich, dass dein editor das vllt. doch nicht so gut kann. du koenntest mal z.b. ultraedit probieren, der kann recht gut konvertieren.

Der HTML-Validator vom W3C zum Beispiel gibt doch an, in
welchem Format er die Webseiten erhält, ungeachtet der im
Quelltext gemachten Angaben.

poste einen link zu einer seite, bei der das ncith uebereinstimmt.

Hallo Jörg,
bei weiteren Versuchen in dieser Sache, um Dir die ganze Problematik zu zeigen, hat sich meine Frage erübrigt. Ich doofe Nuss hatte ganz einfach nur einen idiotischen, kaum zu sehenden Tippselfehler in meiner header()-Anweisung, weshalb die von mir vorgegebene Kodierung niemals weitergegeben wurde, sondern eben der Standard des Servers. Und zwar hatte ich header(„Content-Type: text/html; charset.=UTF-8“); (Falls Dir der kleine Fehler jetzt auch nicht auffällt: Vor dem = von charset= ist ein Punkt.) Diese Zuweisungsnotation wurde natürlich nicht ausgeführt, wobei ich generell Kuddelmuddel wegen dem verwendeten Zeichensatz bekam.

Jedoch bevor wir nun dieses Thema beenden, möchte ich noch kurz was zu Deiner Bemerkung schreiben, dass der Server das ausliefert, was von PHP kommt. Denn das ist meiner Ansicht nach nicht ganz korrekt.

Alle Dokumentenanfragen laufen doch im Server des entsprechenden Protokolls ein (also dem HTTP-Server (z.B. Apache, was aber nicht mit PHP gleichzusetzen ist, vielfach aber leider getan wird), HTTPS-Server, FTP-Server und noch ein paar „Exoten“). Doch wenn ein Dokument überhaupt nicht geparst wird, was ja vielfach noch mit *.html Dateien und generell mit Bilddateien passiert, hat PHP ja überhaupt nichts damit zu tun.
Ist aber eine PHP-Seite gefragt, leitet er (Anm.: der HTTP-Server) die Anfrage an den PHP-Präprozessor (dem Programm das sozusagen hinter der Programmiersprache PHP steht) weiter. Dieser liest nun den PHP-Quelltext der Seite, parst ihn und generiert daraus die HTML-Seite, die an den HTTP-Server und schlussendlich zum Client weitergeleitet wird.
(Quelle: http://php-faq.de)

PHP ist doch nur ein Instrument, um aus einer Reihe von Anweisungen (dem PHP-Quelltext) eine Ausgabe in anderer Form zu erzeugen (z. B. dem HTML-Quelltext einer Webseite). Aber der Browser (Client) hat damit doch überhaupt nichts zu tun. Der kommuniziert ausschließlich mit dem http-Server (oder welches Protokoll er auch immer gesendet hat). Und von dem erhält er auch alle Ausgabe.

So, nun danke ich Dir für Deine Mühe, die Du Dir in diesem Thread wegen dieser Luftblase (meinem idiotischen Fehler) gemacht hast.

Viele Grüße
Kira-Bianca

Jedoch bevor wir nun dieses Thema beenden, möchte ich noch
kurz was zu Deiner Bemerkung schreiben, dass der Server das
ausliefert, was von PHP kommt. Denn das ist meiner Ansicht
nach nicht ganz korrekt.

was aber dem entspricht, was du unten zitierst - dass der php-interpreter vom apache ueblicherweise nicht gefragt wird, was er von stat. html-seiten haelt versteht sich von selbst. hier geht es nur um php-scripte.

Alle Dokumentenanfragen laufen doch im Server des
entsprechenden Protokolls ein (also dem HTTP-Server (z.B.
Apache, was aber nicht mit PHP gleichzusetzen ist, vielfach
aber leider getan wird), HTTPS-Server, FTP-Server und noch ein
paar „Exoten“). Doch wenn ein Dokument überhaupt nicht geparst
wird, was ja vielfach noch mit *.html Dateien und generell mit
Bilddateien passiert, hat PHP ja überhaupt nichts damit zu
tun.
Ist aber eine PHP-Seite gefragt, leitet er (Anm.: der
HTTP-Server) die Anfrage an den PHP-Präprozessor (dem
Programm das sozusagen hinter der Programmiersprache PHP
steht) weiter. Dieser liest nun den PHP-Quelltext der Seite,
parst ihn und generiert daraus die HTML-Seite, die an den
HTTP-Server und schlussendlich zum Client weitergeleitet wird.
(Quelle: http://php-faq.de)

PHP ist doch nur ein Instrument, um aus einer Reihe von
Anweisungen (dem PHP-Quelltext) eine Ausgabe in anderer Form
zu erzeugen (z. B. dem HTML-Quelltext einer Webseite). Aber
der Browser (Client) hat damit doch überhaupt nichts zu tun.
Der kommuniziert ausschließlich mit dem http-Server (oder
welches Protokoll er auch immer gesendet hat). Und von dem
erhält er auch alle Ausgabe.