0

尚未发送任何标题,这是页面上访问的第一段代码。

我正在制作一个多语言网站,因为它的文本很少,我试图根据用户的语言将用户重定向到不同的目录。我已经写了这个php,每次我评估网站时,我都会收到一个错误,它不会加载。

$lang=$_SERVER['HTTP_ACCEPT_LANGUAGE'];
$es=array("es", "es-es", "es-us", "es-mx");

if(array_key_exists($es, $lang)){
header('Location: http://www.site.com/es');
exit;
}else{
header('Location: http://www.site.com');
exit;
}

在 Firefox 中,我收到错误消息“Firefox 检测到服务器正在以永远不会完成的方式重定向对该地址的请求。”

在 Safari 中,试图打开“网站名称”时发生了太多重定向。当打开一个页面时会发生这种情况,它将您重定向到另一个页面,当打开时,您将被重定向到另一个页面。

但我在子文件夹中没有语言检查脚本的副本。当我使 if 语句非常简单if($lang =='es-es')时,它可以完美运行。我的语法一定有问题,但我看不出它是什么。

4

5 回答 5

2

据我了解,如果错误,请纠正我,如果您在 ELSE 语句中,它会将您重定向到同一站点,再次执行检查,并再次重定向您,从而导致无限循环。

于 2013-04-15T09:55:48.913 回答
1

用于in_array检查 - 或将您的字典数组转换为哈希:

1)

if (in_array($lang, $es)){
  // ...
}

2)

$es = array_flip(array("es", "es-es", "es-us", "es-mx"));
if (isset($es[$lang])) {
  // ...
}

就目前而言,您的$es数组是一个索引数组,但您正在尝试在其中搜索- 这些键是简单的数字(0、1、2、3...)。

然而这里还有另一个问题。如果有人试图在没有任何标题变化的情况下访问您的site.com内容怎么办?他们将再次被重定向到它……一次又一次……一次又一次,因为每个后续重定向都由该子句重新检查。esHTTP_ACCEPT_LANGUAGEif

解决方案是制作一些默认页面,不会检查该语言设置;因此,永恒的重定向循环将被打破。)

于 2013-04-15T09:54:04.547 回答
0

您需要使用in_array而不是array_key_exists

首先,尝试这样做: var_dump("<pre>", $lang); die(); 看看你实际上得到了什么$lang

你得到什么,把它复制到你的$es数组值中。

于 2013-04-15T09:55:23.050 回答
0

当我遇到你的问题时...

改变这两行

         $es=array("es", "es-es", "es-us", "es-mx");

          if(array_key_exists($es, $lang)){

有以下几行

  $es=array("es"=>es, "es-es"=>es-es, "es-us"=>es-us, "es-mx"=>es-mx);

    if(array_key_exists($lang, $es)){

基本上在array_keys_exits($key, $array-name)函数中有两个参数传递&它是第一个参数是您要搜索的 (key) 的值,或者第二个参数是传递数组名称。

我认为您将带有空值的 array_key_exits 作为键和错误的语法描述传递。

http://php.net/manual/en/function.array-key-exists.php

于 2013-04-15T10:33:18.250 回答
0

之所以这么说,是因为您一次又一次地将其重定向到同一页面。alert如果您的条件为假或只是一条消息说找不到语言或类似的东西,请尝试重定向到其他页面。

于 2013-04-15T09:57:04.700 回答