본문 바로가기
프로그래밍/PHP

[PHP] 파일 UTF-8저장시 BOM(Byte Order Mark) 의 문제.......

by 베리베리 2008. 8. 20.

에디트 플러스를 이용해 UTF-8 로 저장을 하게 되면 BOM 이생긴다.
그로 인해 session_start(); 와 같은 함수가 사용될시 headers already sent 에러가 발생이 된다.
소스상에는 분명 output 된곳이 없지만, 에러가 발생된다.
이유인즉 UTF-8로 저장시 자동으로 UTF-8을 인식하는 BOM이 추가되는것이다.

그렇다면 BOM 이란 녀석은 뭐하는 놈인가?
http://en.wikipedia.org/wiki/Byte_Order_Mark 이곳에서 정답을 찾으세요~!!
바이트 순서 표식


editplus v 2.30 에서 BOM 제거 설정은
Tools > Preferences > Files > UTF-8 signature 항목에서 세번째인 Always remove signature 를 선택하면된다.

---------------------------------------
이것도 참고하세요^^

// UTF8 BOM 을 확인한다...
function checkBOM($str){
 if(substr($str, 0,3) == pack("CCC",0xef,0xbb,0xbf)){
  return 1;
 }
 return 0;
}

// UTF8 BOM 을 없앤다..
function removeBOM($str){
 // BOM 이 있으면..
 if(checkBOM(&$str)){
  $str=substr($str,3);
 }
 return $str;
}

// UTF8 BOM 을 추가한다.
function appendBOM($str){
 // BOM 이 없으면..
 if(!checkBOM(&$str)) {
  $str=pack("CCC",0xef,0xbb,0xbf).$str;
 }
 return $str;
}

댓글