php 服务端变量,使用PHP HTTP_ACCEPT_LANGUAGE服务器变量

本文介绍了一种使用PHP实现的HTTP语言协商方法,该方法能够从客户端请求中解析出用户偏好的语言设置,并根据服务器提供的语言选项来确定最佳匹配。通过正则表达式处理HTTP头部信息,实现了对多种语言及地区变种的支持。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

更现代的方法是使用

http_negotiate_language():

$map = array("en" => "english", "es" => "spanish");

$conf_language= $map[ http_negotiate_language(array_keys($map)) ];

/*

determine which language out of an available set the user prefers most

$available_languages array with language-tag-strings (must be lowercase) that are available

$http_accept_language a HTTP_ACCEPT_LANGUAGE string (read from $_SERVER['HTTP_ACCEPT_LANGUAGE'] if left out)

*/

function prefered_language ($available_languages,$http_accept_language="auto") {

// if $http_accept_language was left out, read it from the HTTP-Header

if ($http_accept_language == "auto") $http_accept_language = isset($_SERVER['HTTP_ACCEPT_LANGUAGE']) ? $_SERVER['HTTP_ACCEPT_LANGUAGE'] : '';

// standard for HTTP_ACCEPT_LANGUAGE is defined under

// http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.4

// pattern to find is therefore something like this:

// 1#( language-range [ ";" "q" "=" qvalue ] )

// where:

// language-range = ( ( 1*8ALPHA *( "-" 1*8ALPHA ) ) | "*" )

// qvalue = ( "0" [ "." 0*3DIGIT ] )

// | ( "1" [ "." 0*3("0") ] )

preg_match_all("/([[:alpha:]]{1,8})(-([[:alpha:]|-]{1,8}))?" .

"(\s*;\s*q\s*=\s*(1\.0{0,3}|0\.\d{0,3}))?\s*(,|$)/i",

$http_accept_language, $hits, PREG_SET_ORDER);

// default language (in case of no hits) is the first in the array

$bestlang = $available_languages[0];

$bestqval = 0;

foreach ($hits as $arr) {

// read data from the array of this hit

$langprefix = strtolower ($arr[1]);

if (!empty($arr[3])) {

$langrange = strtolower ($arr[3]);

$language = $langprefix . "-" . $langrange;

}

else $language = $langprefix;

$qvalue = 1.0;

if (!empty($arr[5])) $qvalue = floatval($arr[5]);

// find q-maximal language

if (in_array($language,$available_languages) && ($qvalue > $bestqval)) {

$bestlang = $language;

$bestqval = $qvalue;

}

// if no direct hit, try the prefix only but decrease q-value by 10% (as http_negotiate_language does)

else if (in_array($langprefix,$available_languages) && (($qvalue*0.9) > $bestqval)) {

$bestlang = $langprefix;

$bestqval = $qvalue*0.9;

}

}

return $bestlang;

}

?>

curl ^"http://nav.ctyun.cn:9000/deepops/api/chat/sse^" ^ -H ^"Accept: text/event-stream^" ^ -H ^"Accept-Language: zh-CN,zh;q=0.9^" ^ -H ^"Authorization: daaa2756912b107f3c1f7fe55b18913d^" ^ -H ^"Connection: keep-alive^" ^ -H ^"Content-Type: application/json^" ^ -b ^"token=daaa2756912b107f3c1f7fe55b18913d; user=^{^%^22id^%^22:2074^%^2C^%^22username^%^22:^%^22huhonghui^%^22^%^2C^%^22nickname^%^22:^%^22^%^E8^%^83^%^A1^%^E5^%^AE^%^8F^%^E8^%^BE^%^89^%^22^%^2C^%^22wx_name^%^22:^%^22^%^22^%^2C^%^22email^%^22:^%^22huhonghui^@ideal.sh.cn^%^22^%^2C^%^22telephone^%^22:^%^2215218893869^%^22^%^2C^%^22yg_user_id^%^22:0^%^2C^%^22position^%^22:^%^22^%^E5^%^91^%^98^%^E5^%^B7^%^A5^%^22^%^2C^%^22status^%^22:1^%^2C^%^22remark^%^22:^%^22^%^22^%^2C^%^22type^%^22:^%^22^%^E5^%^9B^%^9B^%^E6^%^96^%^B9^%^E4^%^BA^%^BA^%^E5^%^91^%^98^%^22^%^2C^%^22oid_job_post^%^22:^%^22^%^22^%^2C^%^22job_id^%^22:0^%^2C^%^22sub_users^%^22:^%^22^%^22^%^2C^%^22director_email^%^22:^%^22^%^22^%^2C^%^22director_name^%^22:^%^22^%^E7^%^8E^%^8B^%^E4^%^BA^%^9A^%^E5^%^8D^%^9A^%^22^%^2C^%^22attempt_failed^%^22:0^%^2C^%^22updatepasswd_at^%^22:^%^222025-02-23^%^2012:14:20^%^22^%^2C^%^22created_at^%^22:^%^222024-01-19^%^2016:20:44^%^22^%^2C^%^22last_login_at^%^22:^%^222025-03-11^%^2017:54:57^%^22^%^2C^%^22locked_at^%^22:^%^220001-01-01T00:00:00Z^%^22^%^2C^%^22resignation_at^%^22:^%^220001-01-01T00:00:00Z^%^22^%^2C^%^22indateend_at^%^22:^%^220001-01-01T00:00:00Z^%^22^}; is_auto_login=false; username=huhonghui^" ^ -H ^"E-Sign: caccdfd922e5b22b62fd46721119ab6b^" ^ -H ^"Origin: http://nav.ctyun.cn:9000^" ^ -H ^"Referer: http://nav.ctyun.cn:9000/^" ^ -H ^"User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36^" ^ --data-raw ^"^{^\^"message^\^":^\^"^\^",^\^"stream^\^":true,^\^"max_tokens^\^":120^}^" ^ --insecure
最新发布
03-12
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值