php accept-language,php – 在数组中转换Accept-language输出

标签:php

变量http_accept输出是乱七八糟的,我无法使用它,需要转换成这样的数组:

Array

(

[en-ca] => 1

[pt-pt] => 0.4

[de] => 0.2

);

我希望你们能帮助我.

编辑:

这是一个可以检测客户端首选语言的代码,这是一种猜测用户语言的快速方法:

我已经对所有西班牙和葡萄牙访问者进行了思考,在midle中有一些substr,因为pt-BR或pt-PT将使用相同的语言文件,例如es-ES和es-CO.

// 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, 0, 2)] = 1;

else

$linguas_aceites[substr($matches[1], 0, 2)] = $matches[2];

}

foreach ($linguas_aceites as $key => $val) {

if(substr($key, 0, 2) == "pt"){

echo "Portugues e preferido aqui";}

}

?>

如果没有Aif的帮助,这是不可能的(非常感谢原始代码!):

$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);

?>

解决方法:

看起来像this是你的答案:)

尝试解释一种算法:(仅针对您的样本进行测试)

// Get the accept-language header

$al = 'en-US,en;q=0.8,pt-PT;q=0.6'

请注意,每个lang都用逗号分隔,对于某种语言,您有一个首选顺序(浮动内容).

首先,获取逗号内的值:

$values = explode(',', $al);

然后对于每个值,如果有;;检索左手键的值并将其存储在数组中; otherwize,将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];

}

整个脚本:

$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);

标签:php

来源: https://codeday.me/bug/20190730/1578253.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值