PHP如何判断客户端浏览器的语言并跳转到相应的语言页面



PHP如何判断客户端浏览器的语言并跳转到相应的语言页面,方法是什么?为适应php国际化需要,根据不同的用户一个网站会需要使用多种语言,那怎么知道当前访问的用户需要显示哪里语言呢?

方法很多,可以根据来源IP判断,如果是注册用户可以根据她所选择的语言判断,也可以使用COOKIE记录下她第一次访问所选择的语言等等,我今天介绍的是通过$_SERVER来进行判断。

以下是具体的实现代码:

print_r($_SERVER);
Array
(
    [HTTP_HOST] => jokesir.com
    [HTTP_CONNECTION] => keep-alive
    [HTTP_CACHE_CONTROL] => max-age=0
    [HTTP_USER_AGENT] => Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11
    [HTTP_ACCEPT] => text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    [HTTP_ACCEPT_ENCODING] => gzip,deflate,sdch
    [HTTP_ACCEPT_LANGUAGE] => zh-CN,zh;q=0.8
    [HTTP_ACCEPT_CHARSET] => UTF-8,*;q=0.5
    [SystemRoot] => C:\Windows
    [COMSPEC] => C:\Windows\system32\cmd.exe
    [PATHEXT] => .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC
    [WINDIR] => C:\Windows
    [SERVER_SIGNATURE] => <address>Apache/2.2.9 (APMServ) mod_ssl/2.2.9 OpenSSL/0.9.8h PHP/5.2.6 Server at jokesir.com Port 80</address>

    [SERVER_SOFTWARE] => Apache/2.2.9 (APMServ) mod_ssl/2.2.9 OpenSSL/0.9.8h PHP/5.2.6
    [SERVER_NAME] => jokesir.com
    [SERVER_ADDR] => 127.0.0.1
    [SERVER_PORT] => 80
    [REMOTE_ADDR] => 127.0.0.1
    [DOCUMENT_ROOT] => D:/www/jokesir
    [SERVER_ADMIN] => webmaster@localhost
    [SCRIPT_FILENAME] => D:/www/jokesir/index.php
    [REMOTE_PORT] => 49985
    [GATEWAY_INTERFACE] => CGI/1.1
    [SERVER_PROTOCOL] => HTTP/1.1
    [REQUEST_METHOD] => GET
    [QUERY_STRING] => 
    [REQUEST_URI] => /
    [SCRIPT_NAME] => /index.php
    [PHP_SELF] => /index.php
    [REQUEST_TIME] => 1372061725
    [argv] => Array
        (
        )

    [argc] => 0
)

发现上述数组中有一项HTTP_ACCEPT_LANGUAGE内容写的是zh-CN,zh;q=0.8,没错,这正是我当前使用的语言简体中文,有了它之后就好办了。

preg_match('/^([a-z\-]+)/i', $_SERVER['HTTP_ACCEPT_LANGUAGE'], $matches); 
$lang = $matches[1]; 
switch ($lang) { 
       case 'zh-cn' : // 简体中文
               header('Location: http://cn.website.com/'); 
               break; 
       case 'zh-tw' : // 繁体中文
               header('Location: http://tw.website.com/'); 
               break; 
       case 'ko' : // 韩文
               header('Location: http://ko.website.com/'); 
               break; 
       default: // 默认英文
               header('Location: http://en.website.com/'); 
               break; 
} 
// 如果不需要跳转到指定网址,那么在加载语言时进行判断即可,就这么简单