2008-09-03 9 views
4

Bei Verwendung der PHP-include-Funktion wird das Include erfolgreich ausgeführt, aber es gibt auch ein Zeichen aus, bevor die Ausgabe des Includes ausgegeben wird. Das Zeichen hat den Hex-Wert 3F und ich weiß nicht wo es kommt von, obwohl es scheint, mit jedem zu geschehen.PHP Include-Funktion, die unbekanntes Zeichen ausgibt

Zuerst dachte ich, es war Dateicodierung, aber das scheint kein Problem zu sein. Ich habe einen Testfall erstellt, es zu zeigen: (Link funktioniert nicht mehr) http://driveefficiently.com/testinclude.php Diese Datei besteht aus nur:

<? include("include.inc"); ?> 

und include.inc besteht aus nur:

<? echo ("hello, world"); ?> 

und doch, die Ausgabe ist: "Hallo, Welt" wo die? ist ein Char mit einem zufälligen Wert. Es ist dieser Wert, von dem ich die Ursprünge nicht kenne und manchmal meine Seiten ein wenig vermasselt habe.

Irgendwelche Ideen, woher das kommen könnte? Zuerst dachte ich, es könnte etwas mit Dateicodierung zu tun haben, aber ich denke nicht, dass es ein Problem ist.

Antwort

11

Was Sie sehen, ist ein UTF-8-Byte Order Mark:

Die UTF-8-Darstellung der Stückliste ist die Byte-Sequenz EF BB BF, die als ISO-8859-1 Zeichen ï erscheint »¿In den meisten Texteditoren und Webbrowsern nicht auf UTF-8 vorbereitet.

Byte Order Mark on Wikipedia

PHP versteht nicht, dass diese Zeichen sollten „versteckt“ werden und sendet diese an den Browser, als wären sie normale Zeichen waren. Um sie los zu werden, müssen Sie die Datei mit einem "richtigen" Texteditor öffnen, mit dem Sie die Datei als UTF-8 ohne die führende Stückliste speichern können.

You can read more about this problem here

0

Ich sehe hello, world auf der Seite, die Sie verknüpft haben. Keine Probleme, die ich sehen kann ...

Ich benutze Firefox 3.0.1 und Windows XP. Welchen Browser/Betriebssystem laufen Sie? Vielleicht könnte das das Problem sein.

0

Zeichen 3F eigentlich ist das Fragezeichen, es wird nicht nur als eins angezeigt.

Ich bekomme die gleichen Ergebnisse wie Thomas, kein Fragezeichen erscheint.

In der Theorie könnte es ein Problem mit einem Web-Proxy sein, aber ich bin geneigt, ein streunendes Fragezeichen in Ihrem PHP-Markup ... zu vermuten, das Sie vielleicht inzwischen behoben haben, so sehen wir das Problem nicht.

1

Es zeigt nicht auf die gerenderte Seite in Firefox oder IE, aber Sie können die lustigen Charakter, wenn Sie View Source in IE

enter image description here

Ist das auf einem Linux-Rechner sehen? Könnten Sie finden, & mit vim oder sed zu ersetzen, um zu sehen, ob Sie die 3F so loswerden können?

Wenn es unter Windows ist, versuchen Sie, include.inc mit Notepad zu öffnen, um zu sehen, ob das lustige Zeichen sichtbar ist & kann gelöscht werden.

Ich wäre auch neugierig zu sehen, was passiert, wenn Sie den Code aus dem Include kopieren und einfach von selbst ausführen.

3

Ihr Webserver (oder Ihr Texteditor) enthält anscheinend eine BOM in das Dokument. Ich sehe den Rogue-Charakter in meinem Browser nicht, außer wenn ich die Codierung der Site explizit auf Latin-1 setze. Dann sehe ich zwei (!) UTF-8-Stücklisten.

/EDIT: Aus der Tatsache, dass es zwei BOMs Ich schließe, dass die Stückliste tatsächlich von Ihrem Editor am Anfang der Datei enthalten ist. Welchen Editor benutzen Sie? Wenn Sie Visual Studio verwenden, müssen Sie im Menü "Datei" die Option "Speichern unter ..." wählen und dann den Button "Mit Codierung speichern ..." wählen.Dort wählen Sie "UTF-8 ohne BOM" oder etwas Ähnliches.

+0

Es gibt eine globale Einstellung, die Sie jetzt vornehmen können - hier beschrieben: https://stackoverflow.com/questions/5406172/utf-8-without-bom –

0

Ich würde auch gespannt sein, was passiert, wenn Sie den Code aus Include kopieren und einfach von selbst laufen.

Mark: Dies ist auf einer Shared-Hosting-Lösung, so kann ich Shell-Zugriff auf die Datei nicht erhalten. Wie Sie jedoch sehen können here, gibt es keine Zeichen, die nicht dort sein sollten, und das Ausführen der gleichen Datei wie ein Skript erzeugt dieses Zeichen nicht. (Das Shared-Hosting-Unternehmen war von 0 Hilfe, ständig erzählte mir, es ist ein Browser-Problem).