PHP schreibt verstümmelte Zeichen in Notepad
Ich glaube, dass viele Leute bei der Verwendung von PHP auf verstümmelte Dateien gestoßen sind, egal ob sie zum Schreiben fwrite oder file_put_contents verwenden . Vielleicht versuchen Sie, das Problem zuerst durch Kodierung zu lösen, aber das Endergebnis ist oft nicht ideal, obwohl wir es auf UTF-8-Kodierung konvertiert haben...
Was ist also die Ursache? Es fehlt lediglich die Kopfstückliste (dies bezieht sich natürlich definitiv nicht auf die Js-Stückliste).
BOM
Da BOM erwähnt wird, wissen einige Studenten möglicherweise nicht viel über diesen Kerl. Lassen Sie mich es hier kurz erklären. Wenn Sie unter Windows ein Programm wie Notepad verwenden, um eine Textdatei im UTF-8-Format zu speichern, fügt Notepad vor dem Dateikopf ein paar unsichtbare Zeichen (EF BB BF) ein, die sogenannte BOM (Byte Order). Markieren). ).
Nicht beschränkt auf in Notepad gespeicherte Dateien, solange die Öffnung der Datei mehrere unsichtbare Zeichen „EF BB BF“ enthält (das Hexadezimalzeichen sollte xEFxBBxBF sein, sichtbar, wenn die Datei im Binärformat bearbeitet wird). Dies ist wie eine Konvention. Wenn das System dieses Ding sieht, geht es davon aus, dass Ihre Datei UTF-8-codiert ist.
Aus diesem Grund ist die Datei, die Sie dem Benutzer präsentieren, möglicherweise verstümmelt, wenn die Datei keine Stückliste hat.
PS: Tatsächlich können Sie BOM als das Zeichensatzattribut in HTML und das Codierungsattribut in XML verstehen, die als Bezeichner dienen.
Lösung:
Wie gibt man also Stücklisten in PHP aus?
Die Antwort lautet: Ausgabe, bevor der gesamte Inhalt ausgegeben wird:
print(chr(0xEF).chr(0xBB).chr(0xBF));
Wenn Sie Dateien generieren, kann es natürlich zwei der folgenden geben:
fwrite($file, chr(0xEF).chr(0xBB).chr(0xBF)); file_put_contents($file, chr(0xEF).chr(0xBB).chr(0xBF));
Empfohlenes Tutorial: PHP-Video-Tutorial
Das obige ist der detaillierte Inhalt vonPHP-Notizblock verstümmelter Code. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!