##Preface
I believe that many people have encountered garbled generated files when using PHP, whether using fwrite or file_put_contents Write. Maybe you will try to solve it by encoding first, but the final result is often not ideal, even though we have converted it to UTF-8 encoding...
So what is the root cause? ?
One sentence: Lack of head BOM (of course, this definitely does not refer to the BOM of Js)
BOM
Now that it is mentioned BOM, then some students may not know this guy very well. Let me briefly explain it here. Veterans can skip it. When you use a program such as Notepad to save a text file in UTF-8 format under Windows, Notepad will add a few invisible characters (EF BB BF) in front of the file header, which is the so-called BOM (Byte order Mark). ).
is not limited to files saved in Notepad, as long as the opening of the file contains "EF BB BF" several invisible characters (the hexadecimal should be xEFxBBxBF, visible when editing the file in binary). This is like a convention. When the system sees this thing, it will think that your file is UTF-8 encoded.
This is why when the file does not have a BOM, the file you present to the user may be garbled.
PS: In fact, you can understand BOM as the charset attribute in HTML and the encoding attribute in XML, which serve as an identifier.
Solution
So how to output BOM in PHP?
The answer is to output before all content is output:
print(chr(0xEF).chr(0xBB).chr(0xBF));
Of course, if you are generating files, there may be two of the following:
fwrite($file, chr(0xEF).chr(0xBB).chr(0xBF));
file_put_contents($file, chr(0xEF).chr(0xBB).chr(0xBF));
Recommended tutorial:
PHP video tutorial
The above is the detailed content of php generates txt garbled characters. For more information, please follow other related articles on the PHP Chinese website!