I believe many people have encountered garbled files when using PHP, whether they are written using fwrite or file_put_contents. 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? ? It just lacks the head BOM (of course, this definitely does not refer to the Js BOM).
BOM
Since BOM is mentioned, some students may not know much about this guy. 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 Output before all content is output:
print(chr(0xEF).chr(0xBB).chr(0xBF));
Of course, if you are generating a file, it may be the following two:
fwrite($file, chr(0xEF).chr(0xBB).chr(0xBF)); file_put_contents($file, chr(0xEF).chr(0xBB).chr(0xBF));
The above content is for reference only!
Recommended tutorial: PHP video tutorial
The above is the detailed content of php writes txt garbled characters. For more information, please follow other related articles on the PHP Chinese website!