php – 在数组中转换Accept-language输出
发布时间:2020-12-13 21:41:47 所属栏目:PHP教程 来源:网络整理
导读:变量http_accept输出是乱七八糟的,我无法使用它,需要转换成这样的数组: Array( [en-ca] = 1 [pt-pt] = 0.4 [de] = 0.2); 我希望你们能帮助我. 编辑: 这是一个可以检测客户端首选语言的代码,这是一种猜测用户语言的快速方法: 我已经对所有西班牙和葡萄牙访
变量http_accept输出是乱七八糟的,我无法使用它,需要转换成这样的数组:
Array ( [en-ca] => 1 [pt-pt] => 0.4 [de] => 0.2 ); 我希望你们能帮助我. 编辑: 这是一个可以检测客户端首选语言的代码,这是一种猜测用户语言的快速方法: 我已经对所有西班牙和葡萄牙访问者进行了思考,在midle中有一些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); ?> 解决方法
看起来像
this是你的答案:)
尝试解释一种算法:(仅针对您的样本进行测试) // Get the accept-language header $al = 'en-US,pt-PT;q=0.6' 请注意,每个lang都用逗号分隔,对于某种语言,您有一个首选顺序(浮动内容). 首先,获取逗号内的值: $values = explode(',$al); 然后对于每个值,如果有;;检索左手键的值并将其存储在数组中; otherwize,将lang存储为键,并将1作为值. 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]; } 整个脚本: <?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); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |