naisi_accept_language_parse

查看 Markdown

解析浏览器 HTTP Accept-Language,返回优先级最高的一个合法语言标签。

按 RFC 9110 解析 q 权重:忽略非法标签、非法权重、q=0 和通配符,权重相同时保留 原始顺序最靠前的一项。与 URL 标签校验函数共用 BCP 47 / IANA 标准化规则。 显示名称采用 CLDR,英文语言名不足时采用 IANA Description;缺少译名不影响优先级。 现有记录缺失的显示译名已在补充数据源中填入原英文名称;私用标签无名称资料时仍为空字符串。 无完整 Locale 名称时使用基础语言名称,仍保留原标签明确给出的地区;不猜国家。 HTTP 语法允许的空格和制表符仅作为列表分隔空白处理。

函数签名

function naisi_accept_language_parse(string $accept_language): ?array

调用前提

应用入口先调用 naisi_is_ext_license_valid 并确认返回 true。只验证同一请求内已有的有效 FULL/BASIC 证明;没有证明或证明失效时立即返回失败值,不现场补做完整校验。

授权类别:LICENSE;执行模式:PROOF。许可不代替登录、租户或权限上下文;身份与数据要求见本页参数及用途说明。

参数

$accept_language

  • 类型:string
  • 必填:是
  • 默认值:无
  • 方向:输入参数。

完整 Accept-Language 字段值,例如 zh-CN,zh;q=0.9,en-US;q=0.8。

返回值

类型:array{tag:string,language:string,region:string,numeric:string,name_en:string,name_zh:string,name_native:string}|null

有合法标签时返回最高优先级语言信息;没有合法标签或未授权时整体返回 null。 缺失标量子项均为空字符串,包括无资料的显示名;不返回 null 子项。 本函数不决定站点启用的语言,调用方使用自己的语言路由表匹配 tag。 numeric 为标签中明确地区对应的三位 ISO 3166-1 数字代码字符串,保留前导零。 标签未指定地区时 region 为空字符串;无 ISO 国家/地区映射(如 es-419)时 numeric 为空字符串。 语言地区标签不代表用户实际所在国家,也不能用于推断货币。

调用示例

当前请求须满足上方调用前提;请检查实际返回值和引用输出,随机结果及数据包内容以运行环境为准。

$accept_language = 'zh-TW;q=1,en-US;q=0.001';

$result = naisi_accept_language_parse($accept_language);
var_export($result);

版本信息

  • 自版本:1.0.6
  • 实现模块:language
  • 授权类别:LICENSE / PROOF
  • 失败回退:null
  • 文档同步:2026-10-18