2009-03-06 6 views
9

PHP로 사용자의 브라우저 언어를 어떻게 확인할 수 있습니까?PHP로 브라우저 언어를 확인 하시겠습니까?

미국인과 영국인에게 다른 페이지를 보여줘야합니다.

나는 실패
<?php 
if(ereg("us", $_SERVER["HTTP_ACCEPT_LANGUAGE"])) 
    include('http://page.com/us.txt'); 
else 
    include('http://page.com/uk.txt'); 
?> 

내가 미국에있는 사람들을 위해 특정 코드를 실행하고 영국에서 그들을 위해 다음 코드를 시도했다.

+0

는 "미국 사람"또는 뜻 "언어와 사람들 : EN-US"

<?php include_once "Zend/Locale.php"; $zend_locale = new Zend_Locale(Zend_Locale::BROWSER); // returns en for English, de for German etc. echo $browser_language = $zend_locale->getLanguage(); echo "<br />\n"; // returns en_US for American English, en_GB for British English etc. echo $browser_locale = $zend_locale->toString(); echo "<br />\n"; 

솔루션에서 볼? en-kk 노트를 A. 미국에 가져 가면 어떻게됩니까? – Piskvor

+0

나는 en-us라는 언어 설정을 가진 사람들만을 의미합니다. –

답변

8

가능성 단지 대소 문자 구분 문제; eregi ('en-us') 또는 preg_match ('/ ko-us/i')가이를 선택해야합니다.

그러나 헤더에서 'en-us'를 찾는 경우 가끔 잘못 될 수 있습니다. 특히 미국과 영국 언어가 모두 나열 될 때 특히 그렇습니다. "Accept-Language"는 실제로 꽤 복잡한 헤더입니다. 실제로 적절한 파서를 원합니다. 당신이 PECL이있는 경우

은 전체 작업은 이미 당신을 위해 수행됩니다 http://www.php.net/manual/en/function.http-negotiate-language.php

내가 다른 답변은 사용자 에이전트 헤더가는 이유를 알고하지 않는다; 이것은 완전히 가짜입니다. User-Agent는 특정 장소에서 언어 값을 보유 할 의무가 없으며 일부 브라우저 (예 : Opera 및 일부 'Internet Explorer'에 대해 들어 본 적이없는 일부 브라우저)에서는 전혀 사용하지 않습니다. 에 언어가 포함되어있는 경우 사용자가 선호하는 언어가 아닌 브라우저 빌드가 설치된 언어가됩니다. 이 설정은 기본적으로 빌드 언어로 설정되지만 환경 설정 UI에서 사용자가 사용자 정의 할 수 있습니다.

+0

위의 코드에서 HTTP_USER_AGENT를 HTTP_ACCEPT_LANGUAGE로 바꾸시겠습니까? –

+0

그것은 당신의 제안과 함께 잘 작동합니다. 고맙습니다! –

2

아마도$_SERVER['HTTP_USER_AGENT'] 문자열에서 정규식을 수행하는 것이 더 신뢰할 수있는 방법입니다.

<?php 
    if(preg_match('/en-US/', $_SERVER['HTTP_USER_AGENT'])) 
    include('http://page.com/us.txt'); 
    else 
    include('http://page.com/uk.txt'); 
?> 

님의 유효하고 유용한 사용자 에이전트 문자열을 얻을 수 있기 때문에 다른 문이 합리적인 대안이 포함되어 있는지 확인 보장 할 수 없습니다.

+0

다음과 같은 오류가 발생합니다. http://dpaste.com/8204/ –

+0

아, 촬영하십시오. 나는 그 때 당신이 그 대답을 받아 들였다는 것을 알았다. 내가 슬래시를 잊어 버린 것처럼 보입니다 (혼돈이 발견 된 것처럼). – jonstjohn

3

이 시도 :

<? 
if(preg_match('/en-us/i', $_SERVER['HTTP_USER_AGENT'])) 
    include('http://page.com/us.txt'); 
else 
    include('http://page.com/uk.txt'); 
?> 
+0

이제 작동합니다! 당신의 명령에 따라 사건이 까다 롭습니다. –

+0

HTTP_USER_AGENT는 en-us 버전의 * 브라우저 *를 사용하는 대부분의 사용자와 일치합니다. HTTP_ACCEPT_LANGUAGE – Piskvor

+0

Piskvor : 일반 Firefox 다운로드가 ko-ko로 표시되는지 확인해야합니다. – Ross

관련 문제