通过 PHP 检查浏览器的语言?

Posted

技术标签:

【中文标题】通过 PHP 检查浏览器的语言?【英文标题】:Checking browser's language by PHP? 【发布时间】:2010-10-11 20:10:15 【问题描述】:

如何通过php查看用户浏览器的语言?

我需要为美国和英国的人显示不同的页面。

我尝试了以下代码失败

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

我为美国和英国的人们运行特定的代码。

【问题讨论】:

您的意思是“在美国的人”还是“有语言的人:en-us”?当我将我的英语笔记本带到美国时会发生什么? 我的意思是只有语言设置为 en-us 的人。 【参考方案1】:

可能只是区分大小写的问题; eregi('en-us') 或 preg_match('/en-us/i') 应该已经把它捡起来了。

但是,仅在标题中查找“en-us”有时可能会出错,尤其是在同时列出美国和英国语言时。 “Accept-Language”实际上是一个相当复杂的标题,你真的需要一个合适的解析器。

如果您有 PECL,整个工作已经为您完成:http://www.php.net/manual/en/function.http-negotiate-language.php

我不知道为什么其他答案是针对 User-Agent 标头的;这完全是假的。 User-Agent 没有强制要求在任何特定位置保存语言值,对于某些浏览器(例如 Opera,以及一些我从未听说过的称为“Internet Explorer”的小型浏览器)它根本不会。如果它确实包含一种语言,那将是安装浏览器构建时使用的语言,而不是您应该查看的用户首选语言。 (此设置将默认为构建语言,但用户可以从首选项 UI 自定义。)

【讨论】:

你的意思是把上面代码中的HTTP_USER_AGENT替换成HTTP_ACCEPT_LANGUAGE吗?【参考方案2】:

试试这个:

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

【讨论】:

HTTP_USER_AGENT 将匹配大多数拥有 浏览器 的 en-us 版本的用户。您应该检查 HTTP_ACCEPT_LANGUAGE Piskvor:我不知道,一般的 Firefox 下载对我来说显示为 en-GB。 不区分大小写:preg_match('/en-us/i', $_SERVER['HTTP_ACCEPT_LANGUAGE'])【参考方案3】:

一种可能更可靠的方法是对$_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');
?>

不能保证您获得有效且有用的用户代理字符串,因此请确保 else 语句包含合理的替代方案。

【讨论】:

啊,开枪。我看到你接受然后不接受答案。看起来我忘记了正斜杠(发现混乱)。【参考方案4】:

这是一个基于 zend 的解决方案。添加其他语言时也可以使用。

<?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";

解决方案见于:

http://www.mpopp.net/2010/07/how-to-detect-the-users-preferred-language-smarter-than-google/

【讨论】:

以上是关于通过 PHP 检查浏览器的语言?的主要内容,如果未能解决你的问题,请参考以下文章

PHP - 处理大数据

php 检查php的版本。坚持使用WordPress所在站点的根目录。然后在浏览器中访问此页面进行检查:您的

有啥方法可以检查是不是有人使用 Javascript/PHP 关闭了浏览器? [关闭]

如何在 PHP 中知道浏览器用户是不是来自瑞士?

第一章:初识PHP

使用PHP检查浏览器IE8或更低版本