Frage

Bei Verwendung der PHP-Include-Funktion wird das Include erfolgreich ausgeführt, aber es wird auch ein Zeichen ausgegeben, bevor die Ausgabe des Include ausgegeben wird. Das Zeichen hat den Hexadezimalwert 3F und ich habe keine Ahnung, woher es kommt, obwohl es so scheint passiert bei jedem Include.

Zuerst dachte ich, es wäre eine Dateikodierung, aber das scheint kein Problem zu sein.Ich habe einen Testfall erstellt, um es zu demonstrieren:(Link funktioniert nicht mehr) http://driveefficiently.com/testinclude.php Diese Datei besteht nur aus:

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

und include.inc besteht nur aus:

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

und doch ist die Ausgabe: "?Hallo Welt" bei dem die ?ist ein Zeichen mit einem zufälligen Wert.Es ist dieser Wert, dessen Ursprung ich nicht kenne und der meine Websites manchmal ein wenig durcheinander bringt.

Irgendwelche Ideen, woher das kommen könnte?Zuerst dachte ich, es könnte etwas mit der Dateikodierung zu tun haben, aber ich glaube nicht, dass es ein Problem darstellt.

War es hilfreich?

Lösung

Was Sie sehen, ist eine UTF-8-Byte-Reihenfolgemarkierung:

Die UTF-8-Darstellung des BOM ist die Bytesequenz EF BB BF, die in den meisten Texteditoren und Webbrowsern, die nicht für die Verarbeitung von UTF-8 vorbereitet sind, als ISO-8859-1-Zeichen erscheint.

Byte Order Mark auf Wikipedia

PHP versteht nicht, dass diese Zeichen „versteckt“ werden sollen und sendet sie an den Browser, als wären es normale Zeichen.Um sie zu entfernen, müssen Sie die Datei mit einem „richtigen“ Texteditor öffnen, der es Ihnen ermöglicht, die Datei als UTF-8 ohne die führende Stückliste zu speichern.

Mehr zu diesem Problem können Sie hier lesen

Andere Tipps

Ihr Webserver (oder Ihr Texteditor) enthält offenbar eine Stückliste in das Dokument ein.Ich sehe das betrügerische Zeichen nicht in meinem Browser, es sei denn, ich stelle die Codierung der Website explizit auf Latin-1 ein.Dann sehe ich zwei (!) UTF-8-Stücklisten.

/BEARBEITEN:Aus der Tatsache, dass es sie gibt zwei Stücklisten Ich komme zu dem Schluss, dass die Stückliste tatsächlich von Ihrem Editor am Anfang der Datei eingefügt wird.Welchen Editor verwenden Sie?Wenn Sie Visual Studio verwenden, müssen Sie im Menü „Datei“ „Speichern unter …“ sagen und dann die Schaltfläche „Mit Codierung speichern …“ auswählen.Wählen Sie dort „UTF-8 ohne BOM“ oder etwas Ähnliches.

Es wird auf der gerenderten Seite in Firefox oder IE nicht angezeigt, aber Sie können das lustige Zeichen sehen, wenn Sie die Quelle im IE anzeigen

enter image description here

Ist das auf einem Linux-Rechner?Könnten Sie vim oder sed finden und ersetzen, um zu sehen, ob Sie 3F auf diese Weise entfernen können?

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

Ich wäre auch gespannt, was passiert, wenn Sie den Code aus dem Include kopieren und ihn einfach alleine ausführen.

Eigentlich Charakter 3F Ist Das Fragezeichen wird nicht nur als eines angezeigt.

Ich erhalte die gleichen Ergebnisse wie Thomas, es wird kein Fragezeichen angezeigt.

Theoretisch könnte es sich um ein Problem mit einem Web-Proxy handeln, aber ich neige dazu, ein verirrtes Fragezeichen in Ihrem PHP-Markup zu vermuten ... das Sie vielleicht inzwischen behoben haben, sodass wir das Problem nicht sehen.

Ich verstehe hello, world auf der Seite, auf die Sie verlinkt haben.Ich kann keine Probleme erkennen...

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

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

Markieren:Da es sich um eine Shared-Hosting-Lösung handelt, kann ich keinen Shell-Zugriff auf die Datei erhalten.Wie Sie jedoch sehen können Hier, es gibt keine Zeichen, die nicht vorhanden sein sollten, und das Ausführen derselben Datei als Skript erzeugt dieses Zeichen nicht.(Das Shared-Hosting-Unternehmen hat mir nicht weitergeholfen und mir ständig mitgeteilt, dass es sich um ein Browserproblem handelt.)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top