BOARD

팁·활용

UTF-8 웹페이지가 EUC-KR로 보일 때 PHP header로 해결하는 방법

페이지 정보

profile_image
작성자 최고관리자
댓글 0건 조회 5회 작성일 26-10-08 18:03

본문

UTF-8 웹페이지가 EUC-KR로 보일 때 PHP header로 해결하는 방법

UTF-8로 제작된 웹페이지가 브라우저에서 EUC-KR로 잘못 인식되어 한글이 깨지는 현상을 겪고 있는 운영자와 개발자를 위해, PHP header 함수를 이용해 문자셋을 강제로 지정하고 해결하는 방법을 알아봅니다.

웹페이지 인코딩 깨짐 원인

웹페이지가 UTF-8로 제작되고 HTML 상단에 meta 태그(charset=utf-8)가 지정되어 있더라도 한글이 깨지는 현상이 발생할 수 있습니다. 이는 브라우저가 HTML 문서를 해석할 때 서버에서 전송하는 HTTP 응답 헤더(Content-Type)를 HTML 내부의 meta 태그보다 우선시하기 때문입니다. 서버 설정에 의해 인코딩이 EUC-KR로 지정되어 있으면 meta 태그에 UTF-8을 명시해도 브라우저는 이를 무시하고 EUC-KR로 처리하여 한글이 깨지게 됩니다. 또한 서버의 기본 default_charset 설정 상태에 따라 브라우저가 인식하는 인코딩 결과가 달라질 수 있습니다.

PHP header를 이용한 UTF-8 인코딩 강제 설정 방법

웹페이지가 UTF-8로 제작되었음에도 브라우저에서 EUC-KR로 인식되어 한글이 깨지는 현상이 발생할 때는 HTML의 <meta> 태그 외에도 PHP 상단에 HTTP 헤더를 명시하여 문자셋을 강제할 수 있습니다.

적용 방법

PHP 파일의 최상단(HTML 태그, 공백, echo 출력 등 어떠한 데이터보다 앞선 위치)에 아래 코드를 추가합니다. 만약 출력물이 먼저 발생한 뒤에 header() 함수를 호출하면 'Headers already sent' 오류가 발생하며 헤더가 적용되지 않습니다.

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

적용 예시

<?php header("Content-Type: text/html; charset=utf-8");?>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
</head>

주의사항 및 다음 행동

서버의 기본 default_charset 설정 상태나 환경에 따라 결과가 다를 수 있으므로, 코드를 적용한 뒤에는 웹페이지 소스 보기 및 브라우저 인코딩 설정이 UTF-8로 정상 출력되는지 확인해야 합니다.

인코딩 정상 출력 확인 방법

PHP header 함수를 적용한 후 웹페이지 소스와 브라우저에서 인코딩이 정상적으로 출력되는지 확인하려면 다음 단계를 거칩니다.

  • 브라우저 개발자 도구 확인: 브라우저에서 페이지를 연 뒤 개발자 도구를 실행하고 Network 탭으로 이동합니다. 문서 요청 항목을 선택한 후 응답 헤더(Response Headers)의 Content-Type 값에 charset=utf-8이 올바르게 포함되어 전송되는지 확인합니다.
  • 페이지 소스 보기: 웹페이지 본문에서 마우스 우클릭 후 '페이지 소스 보기'를 선택하여 상단에 <?php header("Content-Type: text/html; charset=utf-8");?> 코드가 포함되어 있는지, 그리고 HTML <head> 내부의 <meta http-equiv="content-type" content="text/html; charset=utf-8"> 태그가 정상적으로 위치하는지 확인합니다.

서버의 기본 default_charset 설정 상태에 따라 결과가 다를 수 있으므로 위 항목들을 함께 점검해야 합니다.

PHP header를 이용한 UTF-8 인코딩 설정 방법

웹페이지가 UTF-8로 제작되었음에도 브라우저에서 EUC-KR로 인식되어 한글이 깨지는 현상이 발생할 때는 HTML의 <meta> 태그 외에 PHP 상단에 문자셋을 강제로 지정하는 헤더를 추가해야 합니다.

적용 방법

PHP 파일의 최상단(<html> 태그 출력 이전)에 아래 코드를 추가합니다.

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

적용 전후 예시

[ 변경 전 ]

<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
</head>

[ 변경 후 ]

<?php header("Content-Type: text/html; charset=utf-8");?>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
</head>

서버 설정 및 추가 점검 사항

서버의 기본 default_charset 설정 상태나 MySQL 입출력 인코딩(character_set) 상태에 따라 결과가 다를 수 있습니다. PHP header와 meta 태그를 적용했음에도 문제가 지속된다면 아래 사항을 함께 점검할 수 있습니다.

  • php.ini 설정 확인: default_charset = "UTF-8" 설정이 올바르게 되어 있는지 확인합니다.
  • MySQL 인코딩 지정: 데이터베이스 연동 시 입출력 인코딩이 달라 문제가 발생하는 경우 mysql_query("set session character_set_connection=utf8;"); 등의 코드를 통해 연결 인코딩을 지정할 수 있습니다.

주의사항 및 다음 행동

코드를 추가한 후 웹페이지 소스 및 브라우저 인코딩 설정이 UTF-8로 정상 출력되는지 확인합니다.

상황별 인코딩 설정 및 확인 가이드

내 상황우선할 판단다음 행동
UTF-8 웹페이지인데 브라우저에서 EUC-KR로 인식되어 한글이 깨짐HTML <meta> 태그 단독 사용을 넘어 PHP 상단 헤더 전송 방식 적용 필요PHP 파일 최상단에 <?php header("Content-Type: text/html; charset=utf-8");?> 추가
PHP header 코드를 추가했으나 정상 출력 여부가 불확실함서버의 기본 default_charset 설정 및 HTTP 응답 헤더 상태 확인브라우저 개발자 도구의 Network 탭에서 Response Headers의 Content-Type 검증

실전 FAQ

Q. meta 태그에 utf-8을 선언했는데도 왜 한글이 깨지나요?

  • 답변: HTML 문서 내의 <meta> 태그만으로는 브라우저의 문자셋이 완전히 강제되지 않는 경우가 있습니다. 서버의 헤더 전송 방식이나 기본 default_charset 설정 상태에 따라 브라우저가 다른 인코딩으로 해석할 수 있으므로, PHP 상단에 header("Content-Type: text/html; charset=utf-8"); 코드를 함께 선언해야 합니다.

Q. PHP header 선언 후에도 한글이 계속 깨질 때 추가로 확인할 점은 무엇인가요?

  • 답변: PHP 파일 최상단에 헤더를 추가했음에도 문제가 지속된다면, MySQL 등 데이터베이스와의 연동 과정에서 입출력 인코딩(characterset)이 일치하는지 확인해야 합니다. 서버 환경이나 `defaultcharset` 설정에 따라 결과가 다를 수 있으므로 데이터베이스 연결 설정이나 파일 자체의 저장 인코딩(UTF-8 여부)을 함께 점검하는 것이 안전합니다.

함께 보면 좋은 글

참고자료

기타 참고자료

댓글목록

등록된 댓글이 없습니다.