【发布时间】:2010-07-26 07:03:54
【问题描述】:
我有多个指向同一个站点的域,其中一些以“.br”结尾(巴西的域,因此是葡萄牙语的域)
我想检测此人来自哪个域(.br 与否)并加载正确的语言...
我可以使用 PHP、JavaScript 或标准 HTML/CSS 等...我是怎么做到的? (用什么?)
【问题讨论】:
标签: php javascript html css
我有多个指向同一个站点的域,其中一些以“.br”结尾(巴西的域,因此是葡萄牙语的域)
我想检测此人来自哪个域(.br 与否)并加载正确的语言...
我可以使用 PHP、JavaScript 或标准 HTML/CSS 等...我是怎么做到的? (用什么?)
【问题讨论】:
标签: php javascript html css
在服务器端,使用HTTP_HOST 变量,它基本上是Host 标头和检查请求发送到的主机的简单方法。
$_SERVER['HTTP_HOST']
请参阅此question,了解SERVER_NAME 和HTTP_HOST 变量之间的良好比较。
在客户端,使用document.domain。对于这个页面 - https://developer.mozilla.org/en/document.domain,document.domain 的值为
"developer.mozilla.org"
【讨论】:
$_SERVER['HTTP_REFERER'] 应该得到该信息。但这不是一个确定的防火方式。有些人在他们的浏览器中关闭或欺骗了引荐来源等。这是我知道的唯一方法,除非您可以将获取数据附加到域上的 url 以设置语言等。然后您只需检查该获取数据。
【讨论】:
如果您使用的是 PHP5.3+,则可以使用
Locale::acceptFromHttp — 尝试根据 HTTP“Accept-Language”标头找出最佳可用语言环境
如果没有,您仍然可以自己从 Accept-Language 标头中确定。使用 Accept Header 应该比使用 TLD 更可靠,特别是如果您还需要使用任何 other intl extensions。
【讨论】:
$_SERVER 中的标题
intl 是 PHP5.3 的原生扩展,不再需要单独安装。
intl 可能不可用,如果你的包维护者使用构建选项,但总是有 PECL。