서문
PHP를 사용할 때 fwrite를 사용하든 file_put_contents를 사용하든 상관없이 왜곡된 생성 파일을 많은 사람들이 접했다고 생각합니다. 어쩌면 먼저 인코딩해서 해결하려고 하겠지만, UTF-8 인코딩으로 변환했는데도 최종 결과가 이상적이지 않은 경우가 많습니다...
그럼 근본 원인은 무엇일까요?
한 문장: 헤드 BOM 부족(물론 이는 Js의 BOM을 의미하는 것은 아닙니다)
BOM
BOM이 언급되었기 때문에 이 사람을 잘 모르는 학생들도 있을 수 있습니다. 여기서 이야기하면 베테랑은 건너뛸 수 있습니다. Windows에서 메모장과 같은 프로그램을 사용하여 UTF-8 형식으로 텍스트 파일을 저장하면 메모장은 파일 헤더 앞에 몇 개의 보이지 않는 문자(EF BB BF)를 추가합니다. 이는 소위 BOM(바이트 순서)입니다. 표시). ).
파일 열기에 "EF BB BF" 여러 개의 보이지 않는 문자가 포함되어 있는 한 메모장에 저장된 파일에만 국한되지 않습니다(16진수는 xEFxBBxBF여야 하며 바이너리로 파일을 편집할 때 표시됨). 이는 관례와 같습니다. 시스템에서 이 내용을 보면 파일이 UTF-8로 인코딩된 것으로 간주합니다.
이 때문에 파일에 BOM이 없으면 사용자에게 제공하는 파일이 깨질 수 있습니다.
PS: 실제로 BOM은 HTML의 charset 속성과 식별자 역할을 하는 XML의 인코딩 속성으로 이해할 수 있습니다.
Scheme
그럼 PHP에서 BOM을 출력하는 방법은 무엇일까요?
모든 콘텐츠가 출력되기 전에 출력하는 것이 정답입니다.
print(chr(0xEF).chr(0xBB).chr(0xBF));
물론 파일을 생성하는 경우 다음 두 가지일 수 있습니다.
fwrite($file, chr(0xEF).chr(0xBB).chr(0xBF)); file_put_contents($file, chr(0xEF).chr(0xBB).chr(0xBF));
추천 튜토리얼: PHP 비디오 튜토리얼
위 내용은 PHP가 txt 왜곡 문자를 생성합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!