영원한사랑

UTF-8 헤더(header) 오류

EUC-KR 에서는 header가 선언되기 이전에 그 어떤 출력(공백/엔터/HTML등)도 선행되어서는 안됩니다.

소스 코드의 최상단에 (HTML 및 그 어떤 출력도 나오기 전) 다음과 소스를 삽입하세요.

<?
ob_start();

 

HTML이나 기타 출력되는 값을 메모리에 저장해 두었다가 프로그램 종료시 한꺼번에 내보내는 명령입니다.

이 펑션이 호출된 이후에 header() 를 만나면 어떤 HTML 출력과도 관계 없이 정상 실행합니다.

단, 기존의 게시판이나 기타 프로그램을 수정하고 계시며, 해당 프로그램에서도 ob_start()를 중복 사용하고 있다면, 해당 프로그램에서의 ob_start() 사용 용도에 따라 HTML출력에 또다른 문제가 발생할 수 있습니다(일반적인 경우 문제 없습니다)


EUC-KR에서는 헤더 선언전에 출력문자를 없애거나 ob_start();를 사용하면 아무런 문제가 생기지 않습니다.

문제는 UTF-8이죠..^^ 요거 때문에 저도 한참 헤맸습니다.

Warning: Cannot modify header information - headers already sent by.....

..등 비슷한 에러도 마찬가지입니다.


이 문제는 파일을 메모장, 울트라에디터(ultraedit)등 텍스트에디터로 utf-8로 컨버팅해서 저장시 눈에 보이지 않는 기호를 파일을 헤더에 포함시켜서 생긴것입니다.

EMEDITOR라는 텍스트에디터를 사용해보세요. 파일 저장시 Add a unicode signature(BOM)체크박스 선택을 해제시키세요.

http://www.emeditor.com/download.htm (30일간만 무료사용)


또는..

에디터플러스로 새문서를 열어서 기존 코드를 붙혀넣기 한 후..

인코딩을 UTF-8로 저장하세요. 그럼 헤더 오류가 나오지 않습니다.

저장전 에디터플러스 도구 > 기본설정 > 항목의 파일 선택 > 우측 UTF-8 셀렉트 옵션에서 "항상 식별기호 제거" 선택 후 저장 하시구요.

간혹 UTF-8인데 EUC-KR로 인식하는 경우 하얀 백지 화면이 나오는데 이럴땐..

최 상단에..

<?
header('Content-Type: text/html; charset=utf-8');

..을 선언해주세요.