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의 인코딩 속성으로 이해할 수 있습니다.
Solution:
그래서 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가 txt에 잘못된 문자를 씁니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!