如何解决转换数组中的接受语言输出
| 变量http_accept输出是一团糟,我无法使用它,需要转换成这样的数组:Array
(
[en-ca] => 1
[pt-pt] => 0.4
[de] => 0.2
);
我希望你们能帮助我。
编辑:
这是将检测客户端首选语言的代码,这是猜测用户语言的快速方法:
我已经对所有西班牙和葡萄牙访客进行了这种思考,中间部分包含一些substr,因为pt-BR或pt-PT将使用相同的语言文件,例如es-ES和es-CO都使用相同的语言文件。
<?php
// detectar idioma
$linguagens = $_SERVER[\'HTTP_ACCEPT_LANGUAGE\'];
$parcelas = explode(\',\',$linguagens);
$linguas_aceites = array();
foreach ($parcelas as $lingua) {
$contagem = preg_match(\'/([-a-zA-Z]+)\\s*;\\s*q=([0-9\\.]+)/\',$lingua,$matches);
if ($contagem === 0)
$linguas_aceites[substr($lingua,2)] = 1;
else
$linguas_aceites[substr($matches[1],2)] = $matches[2];
}
foreach ($linguas_aceites as $key => $val) {
if(substr($key,2) == \"pt\"){
echo \"Portugues e preferido aqui\";}
}
?>
没有Aif的帮助,这是不可能的(非常感谢原始代码!):
<?php
$al = \'en-US,en;q=0.8,pt-PT;q=0.6\';
$values = explode(\',$al);
$accept_language = array();
foreach ($values AS $lang) {
$cnt = preg_match(\'/([-a-zA-Z]+)\\s*;\\s*q=([0-9\\.]+)/\',$lang,$matches);
if ($cnt === 0)
$accept_language[$lang] = 1;
else
$accept_language[$matches[1]] = $matches[2];
}
print_r($accept_language);
?>
解决方法
看起来这是您的答案:)
尝试解释一种算法:(仅在样本中进行了测试)
// Get the accept-language header
$al = \'en-US,en;q=0.8,pt-PT;q=0.6\'
请注意,每个语言都由逗号,
分隔,对于某些语言,您具有优先顺序(浮点数)。
首先,获取逗号内的值:
$values = explode(\',\',$al);
然后,对于每个值,如果有一个“ 6”,则检索左键的值并将其存储在数组中;否则,将lang存储为键,并以1
作为值。
我使用preg_match
返回匹配数的事实(如果没有,则为0,在我们的情况下为第一个)。
foreach ($values AS $lang) {
$cnt = preg_match(\'/([-a-zA-Z]+)\\s*;\\s*q=([0-9\\.]+)/\',$lang,$matches);
if ($cnt === 0)
$accept_language[$lang] = 1;
else
$accept_language[$matches[1]] = $matches[2];
}
整个脚本:
<?php
$al = \'en-US,pt-PT;q=0.6\';
$values = explode(\',$al);
$accept_language = array();
foreach ($values AS $lang) {
$cnt = preg_match(\'/([-a-zA-Z]+)\\s*;\\s*q=([0-9\\.]+)/\',$matches);
if ($cnt === 0)
$accept_language[$lang] = 1;
else
$accept_language[$matches[1]] = $matches[2];
}
print_r($accept_language);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。