Vorwort
Ich glaube, dass viele Menschen bei der Verwendung von PHP auf verstümmelte generierte Dateien gestoßen sind, unabhängig davon, ob sie fwrite oder file_put_contents Write 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?
Ein Satz: Fehlende Kopfstückliste (dies bezieht sich natürlich definitiv nicht auf die Js-Stückliste)
Stückliste
Seitdem Es wurde BOM erwähnt, einige Studenten kennen diesen Kerl vielleicht nicht sehr gut. Veteranen können es hier überspringen. Wenn Sie unter Windows ein Programm wie Notepad verwenden, um eine Textdatei im UTF-8-Format zu speichern, fügt Notepad vor dem Dateikopf einige 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.
Schema
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 generiert verstümmelten TXT-Code. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!