BOARD

강좌·기초

PHP 브라우저 언어 설정 기반 페이지 자동 포워딩 구현 방법

페이지 정보

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

본문

PHP 브라우저 언어 설정 기반 페이지 자동 포워딩 구현 방법

웹 브라우저의 언어 설정 코드를 확인하여 방문자 국가별 페이지로 자동 포워딩하는 PHP 구현 방법과 쿠키 활용법을 확인합니다.

PHP 브라우저 언어 설정 기반 페이지 자동 포워딩 방법

웹 브라우저가 서버에 전달하는 $_SERVER['HTTP_ACCEPT_LANGUAGE'] 전역 변수를 활용하여 접속자의 기본 언어 설정(한국어, 영어, 일어, 중국어 등)을 판별하고, 조건문과 header 함수 또는 HTML Meta Refresh를 이용해 각 국가별 페이지로 자동 리다이렉트할 수 있습니다.

1. 전역 변수 확인 및 개념

웹 브라우저는 기본 인코딩 타입 및 언어 설정 정보를 서버로 전송합니다. 한국어의 경우 $_SERVER['HTTP_ACCEPT_LANGUAGE'] 변수 값이 ko로 전달되며, 영어는 en, 일본어는 ja, 중국어는 zh 등으로 확인됩니다.

2. 페이지 포워딩 구현 방법

[방법 1] 조건문과 정규식을 활용한 리다이렉트 및 쿠키 설정

$_SERVER['HTTP_ACCEPT_LANGUAGE'] 값을 정규식으로 검사하여 언어별 프레임 페이지로 이동시키고, 사용자의 언어 상태를 유지하기 위해 쿠키를 설정하는 예시입니다.

<?php
// 한글 방문자의 경우 kr_frame으로 이동
if(preg_match('/ko/', $_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
 if((!preg_match('/korean/', $_COOKIE['lang'])) && (!preg_match('/english/', $_COOKIE['lang']))) {
 $lang = 'korean';
 setcookie("lang", $lang, time() + (3600 * 24) * 365, "/");
 }
 header("Location: http://example.com/kr_frame.php");
 exit;
}
// 영문 방문자의 경우 en_frame으로 이동
else {
 if((!preg_match('/korean/', $_COOKIE['lang'])) && (!preg_match('/english/', $_COOKIE['lang']))) {
 $lang = 'english';
 setcookie("lang", $lang, time() + (3600 * 24) * 365, "/");
 }
 header("Location: http://example.com/en_frame.php");
 exit;
}
?>
[방법 2] 다국어(국문·일문·중문·영문) 분기 처리

여러 언어 코드를 elseif 조건문으로 세분화하여 각각 지정된 경로로 리다이렉트합니다.

<?php
// 한글 방문자
if(preg_match('/ko/', $_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
 header("Location: /lang/korean.php");
 exit;
}
// 일본어 방문자
elseif(preg_match('/jp/', $_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
 header("Location: /demo/lang/japanese.php");
 exit;
}
// 중국어 방문자 (기본)
elseif(preg_match('/zh/', $_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
 header("Location: /lang/chinese.php");
 exit;
}
// 중국어 간체
elseif(preg_match('/zh-ch/', $_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
 header("Location: /lang/chinese_ch.php");
 exit;
}
// 중국어 번체
elseif(preg_match('/zh-hk/', $_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
 header("Location: /demo/lang/chinese_hk.php");
 exit;
}
// 영문 방문자 (기본값)
else {
 header("Location: /demo/lang/english.php");
 exit;
}
?>
[방법 3] substr과 switch 문, HTML Meta Refresh 활용

문자열 앞의 2자리 코드를 잘라내어 switch 문으로 분기하고, meta 태그를 이용해 리프레시 방식으로 포워딩하는 예시입니다.

<?php
$var = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
switch($var) {
 case "ko":
 echo "<meta http-equiv='Refresh' content='0; URL=/demo/lang/korean.php'>";
 break;
 case "ja":
 echo "<meta http-equiv='Refresh' content='0; URL=/demo/lang/japanese.php'>";
 break;
 case "zh":
 echo "<meta http-equiv='Refresh' content='0; URL=/demo/lang/chinese.php'>";
 break;
 default:
 echo "<meta http-equiv='Refresh' content='0; URL=/demo/lang/english.php'>";
 break;
}
?>

3. 주의사항

  • header() 함수를 사용하여 페이지를 이동시킬 때는 브라우저에 어떠한 HTML 출력이나 공백, 줄바꿈 등의 텍스트가 전달되기 이전에 실행되어야 합니다. 출력이 발생한 이후에는 헤더를 재전송할 수 없습니다.

PHP 브라우저 언어 설정 기반 자동 포워딩 가이드

  • 내 상황: 그누보드 또는 PHP 기반 웹사이트에서 방문자의 브라우저 언어 설정 코드($_SERVER['HTTP_ACCEPT_LANGUAGE'])를 파악하여 국가별 페이지로 자동 이동시키고자 할 때
  • 선택 기준:
    • 쿠키를 활용해 방문자의 언어 선택 상태를 일정 기간 유지하며 세부 프레임 페이지로 이동하려면 [방법 1] 선택
    • 국문, 영문, 일문, 중문 등 다국어 경로를 체계적으로 분기하려면 [방법 2] 선택
    • 문자열 앞 2자리를 잘라내어 HTML meta 태그 방식으로 가볍게 리프레시하려면 [방법 3] 선택
  • 다음 행동: 선택한 PHP 코드를 메인 진입 파일(예: index.php) 최상단에 배치합니다. PHP의 header() 함수는 브라우저에 HTML 태그나 공백 등 어떠한 출력도 전달되기 전에 실행되어야 합니다. 따라서 해당 코드를 파일의 최상단(첫 줄 <?php 이전)에 배치하고, 파일 내에 불필요한 공백이나 줄바꿈이 포함되지 않도록 주의해야 합니다.

실전 FAQ

Q. header() 함수를 실행할 때 'Headers already sent' 오류가 발생합니다.

  • 예외 및 원인: header('Location:...') 코드가 실행되기 전에 HTML 태그, 공백 문자, 혹은 PHP 파일 맨 앞의 빈 줄이 먼저 출력되면 헤더가 이미 전송되어 리다이렉트가 불가능합니다.
  • 대안: PHP 파일의 맨 첫 줄 <?php 바로 이전에 어떠한 공백이나 BOM도 존재하지 않는지 확인하고, HTML 출력보다 상단에서 스크립트가 완전히 처리되도록 배치하세요.

Q. 사용자가 브라우저 언어와 다른 언어 페이지를 수동으로 선택했을 때 고정하는 방법은 무엇인가요?

  • 대안: 첫 접속 시에만 $_SERVER['HTTP_ACCEPT_LANGUAGE']로 자동 포워딩을 수행하고, 사용자가 언어 선택 버튼을 눌렀을 때는 쿠키(setcookie)에 언어 값을 저장합니다. 이후 접속부터는 브라우저 언어보다 쿠키 값을 우선 검사하도록 로직을 수정하면 사용자의 수동 선택을 유지할 수 있습니다.

함께 보면 좋은 글

참고자료

기타 참고자료

댓글목록

등록된 댓글이 없습니다.