$ _SERVER ['HTTP_USER_AGENT']的内容是否总是英文字符

时间:2018-07-31 17:51:36

标签: php filter

我一直在寻找所有$ _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);

任何外国浏览器都使用本地语言字符吗?

1 个答案:

答案 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]的超集的编码。