我一直在寻找所有$ _SERVER ['HTTP_USER_AGENT']的列表,但是找不到一个健壮的列表。我想知道$ _SERVER ['HTTP_USER_AGENT']的内容是否始终是unicode英文字符,以便在评估字符串之前可以从字符串中剥离高字节和低字节。
例如:
$_SERVER['HTTP_USER_AGENT'] = filter_var($_SERVER['HTTP_USER_AGENT'], FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_LOW);
$_SERVER['HTTP_USER_AGENT'] = filter_var($_SERVER['HTTP_USER_AGENT'], FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_HIGH);
任何外国浏览器都使用本地语言字符吗?
答案 0 :(得分:3)
首先:即使USASCII和Unicode相同的子集,我也不会将HTTP标头字符串视为Unicode。
第二:更重要的是要问允许使用哪种类型的用户代理字符串,而不是当前使用的字符串,因为明天可能会改变。
引用https://tools.ietf.org/html/rfc7230#section-3.2.4
从历史上看,HTTP允许字段内容中包含文本 ISO-8859-1字符集[ISO-8859-1],仅支持其他字符集 通过使用[RFC2047]编码。实际上,大多数HTTP标头 字段值仅使用US-ASCII字符集[USASCII]的子集。 新定义的标头字段应将其字段值限制为 US-ASCII八位位组。接收者应在字段中对待其他八位位组 内容(obs-text)作为不透明数据。
在这方面,我不排除使用SüperBrøwser
用户代理名的潜在浏览器,该用户代理名将由FILTER_FLAG_STRIP_HIGH
破坏。
这由earlier section加强:
收件人必须将HTTP消息解析为八位字节序列, 是US-ASCII [USASCII]的超集的编码。