Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

BOM immer bei header(...)

26 views
Skip to first unread message

Helmut Blass

unread,
Feb 23, 2011, 7:27:20 AM2/23/11
to
Hallo NG,
ich versuche jetzt schon seit Stunden eine simple, wohlgeformte XML-
Datei auf den Browser rauszuschicken. Beginnt ganz normal mit
<?xml version="1.0" encoding="utf-8"?>

mit diesen zwei Befehlen erfolgt die Ausgabe:
header("Content-type: text/xml; charset=utf-8");
print $xml;

Das Problem ist, dass am Anfang IMMER das BOM erscheint, was den
Firefox zu einer Fehlermeldung veranlasst (im IE als Kastl ganz am
Anfang des Quelltextes). im xml-String ist _kein_ BOM Auch wenn ich
nach dem header-Befehl nur ein "hallo" ausgebe, erscheint das BOM.
Hat das evtl. irgendwas mit der htaccess- oder Apache-config-datei zu
tun?
Die Ausgabe geht an einen anderen Server, der den xml-String
weiterverarbeitet, deshalb sollte da das BOM nicht drin sein.
Wer weiss Abhilfe?

Gruss, Helmut

Karl Pflästerer

unread,
Feb 23, 2011, 9:21:37 AM2/23/11
to
Helmut Blass <helmut...@web.de> writes:

Dann befindet sich der BOM eben entweder in deiner PHP Datei oder in
einer davon inkludierten Datei. Von alleine oder durch Apache kommt da
nichts hin (für diejenigen, die es genau wissen wollen: natürlich ginge
es mit Apache2 zB mit Ausgabefiltern; das diese hier einen BOM
platzieren halte ich für weitgehend unwahrscheinlich).

KP

Michael Vogel

unread,
Feb 23, 2011, 10:03:52 AM2/23/11
to
Am 23.02.2011 13:27, schrieb Helmut Blass:

> Das Problem ist, dass am Anfang IMMER das BOM erscheint, was den
> Firefox zu einer Fehlermeldung veranlasst

Kann es sein, dass eine Deiner eingebundenen PHP-Dateien selber einen
BOM enthält?

Michael

Helmut Blass

unread,
Feb 23, 2011, 10:30:03 AM2/23/11
to
On 23 Feb., 15:21, k...@rl.pflaesterer.de (Karl Pflästerer) wrote:

> Dann befindet sich der BOM eben entweder in deiner PHP Datei oder in
> einer davon inkludierten Datei.

Danke für den Tipp. Jetzt haben wir aber das Problem, dass anscheinend
fuenf PHP-Files betroffen sind (BOM am Dateianfang, mit _einem_ Hex-
Editor festgestellt), aber der einzige (andere) Editor, der die Dinger
eliminieren kann, erkennt das BOM nur bei _einer_ der fuenf Files.
Gibt es da ein probates Mittel, mit dem man die Dinger eliminieren
kann?

Gruss, Helmut

Thomas 'PointedEars' Lahn

unread,
Feb 23, 2011, 2:08:39 PM2/23/11
to
Helmut Blass wrote:

> ich versuche jetzt schon seit Stunden eine simple, wohlgeformte XML-
> Datei auf den Browser rauszuschicken. Beginnt ganz normal mit
> <?xml version="1.0" encoding="utf-8"?>

Also einer überflüssigen Zeile. UTF-8 ist eine der XML-Defaultcodierungen.¹

> mit diesen zwei Befehlen erfolgt die Ausgabe:
> header("Content-type: text/xml; charset=utf-8");

^ ^
Darin ist ein Leerzeichen zuviel, und möglicherweise wird "Content-Type"
benötigt.²

> print $xml;
>
> Das Problem ist, dass am Anfang IMMER das BOM erscheint, was den
> Firefox zu einer Fehlermeldung veranlasst (im IE als Kastl ganz am
> Anfang des Quelltextes).

Na lego, das XML-Dokument ist ja dann nicht mehr wohlgeformt.²

> im xml-String ist _kein_ BOM

Aber wahrscheinlich am Anfang Deines Scripts.

> Auch wenn ich nach dem header-Befehl nur ein "hallo" ausgebe, erscheint
> das BOM. Hat das evtl. irgendwas mit der htaccess- oder Apache-config

> datei zu tun?

Ja, wenn Du oder Dein Webhoster nicht aufgepasst haben, enthält die
Konfiguration (.htaccess oder httpd.conf bzw. apache*.conf) vielleicht noch
die veraltete Voreinstellung

AddDefaultCharset ISO-8859-1

was zu

Content-Type: text/xml; charset=ISO-8859-1

führt.³

Wenn Deine UTF-8-codierten Quelltexte dann einen BOM⁵ (vor dem `<?php')
haben, wird dieser (EF BB BF) als drei Zeichen aus ISO-8859-1 dargestellt:
. Auch und insbesondere wenn Dein Headerfeld-Name nicht genau mit diesem
Default übereinstimmt (siehe oben).

> Die Ausgabe geht an einen anderen Server, der den xml-String
> weiterverarbeitet, deshalb sollte da das BOM nicht drin sein.
> Wer weiss Abhilfe?

Response-Header analysieren (z.B. mit "Live HTTP Headers"-Extension⁶)
und/oder Webhoster LARTen.


PointedEars
___________
¹ <http://www.w3.org/TR/REC-xml/#charencoding>
² <http://www.w3.org/TR/xml/#sec-well-formed>
³ <http://tools.ietf.org/html/rfc2616#section-14.17>
⁴ <https://issues.apache.org/bugzilla/show_bug.cgi?id=23421>
<http://httpd.apache.org/docs/2.0/mod/core.html#adddefaultcharset>
⁵ <http://de.wikipedia.org/wiki/Byte_Order_Mark>
⁶ <https://addons.mozilla.org/de/firefox/addon/live-http-headers/>
--
Java hat in etwa soviel mit JavaScript zu tun, wie Gummi mit Gummibärchen
;-)
-- Alexander Clauss
in <1fkgjxx.pels4b1saxyvaN%acl...@hrzpub.tu-darmstadt.de>

Thomas 'PointedEars' Lahn

unread,
Feb 23, 2011, 2:11:24 PM2/23/11
to
Helmut Blass wrote:

> Karl Pflästerer wrote:
>> Dann befindet sich der BOM eben entweder in deiner PHP Datei oder in
>> einer davon inkludierten Datei.
>
> Danke für den Tipp. Jetzt haben wir aber das Problem, dass anscheinend
> fuenf PHP-Files betroffen sind (BOM am Dateianfang, mit _einem_ Hex-
> Editor festgestellt),

Sagte ich ja.

> aber der einzige (andere) Editor, der die Dinger eliminieren kann, erkennt
> das BOM nur bei _einer_ der fuenf Files.

Weshalb nimmst Du nicht den Hex-*Editor*?

> Gibt es da ein probates Mittel, mit dem man die Dinger eliminieren
> kann?

Ja, Dateien neu ohne BOM speichern. Oder einfach den Webserver richtig
konfigurieren.


PointedEars
--
var bugRiddenCrashPronePieceOfJunk = (
navigator.userAgent.indexOf('MSIE 5') != -1
&& navigator.userAgent.indexOf('Mac') != -1
) // Plone, register_function.js:16

Karl Pflästerer

unread,
Feb 23, 2011, 2:26:05 PM2/23/11
to
Helmut Blass <helmut...@web.de> writes:

PHP zum Beispiel?
Ein utf-8 BOM ist "\xEF\xBB\xBF"; ersetze einfach diese 3 Zeichen am
Anfang der Datei durch nichts.
sed, perl, awk ... gehen ebenso.

KP

0 new messages