HTTP请求的编码是什么?

HTTP请求的编码是什么?,http,Http,在执行类似于json\u encode($\u SERVER)的操作时,我会收到一个错误,因为要进行json编码的输入不是有效的UTF-8。事实上,我研究了这个错误,发现一些用户代理字符串是用ISO-8859-1编码的。我如何知道HTTP请求使用了什么编码,以便我可以根据需要使用utf8\u encode()或iconv()来对数据进行JSON编码?据我所知,标准没有说: 请求主体应该在内容类型标头中具有编码,但标头值应该是纯ascii。从我所能说的来看,任何超出这个范围的事情都没有具体说明。我

在执行类似于
json\u encode($\u SERVER)
的操作时,我会收到一个错误,因为要进行json编码的输入不是有效的UTF-8。事实上,我研究了这个错误,发现一些用户代理字符串是用ISO-8859-1编码的。我如何知道HTTP请求使用了什么编码,以便我可以根据需要使用
utf8\u encode()
iconv()
来对数据进行JSON编码?

据我所知,标准没有说:

请求主体应该在内容类型标头中具有编码,但标头值应该是纯ascii。从我所能说的来看,任何超出这个范围的事情都没有具体说明。我不确定这是否完全是错误的,但显然没有标准可以用于呼叫iconv


我要做的就是循环遍历字符串并删除任何非ASCII值。也许你可以通过一个简单的str_-replace调用或preg_-replace来解决这个问题。

HTTP头,比如
User-Agent
应该是ASCII。HTTP请求和响应正文使用
内容类型
标题的
字符集
属性中指定的文本编码进行编码。谢谢@EricLaw。因此,如果不是ASCII,这意味着浏览器只是发送了一个错误的请求?在我的例子中,用户代理包含“OrangeEspaña”,任何不使用ASCII的头都是愚蠢的。话虽如此,从历史上看,RFC2616允许ASCII超集
ISO-8859-1
中的字段内容。任何其他字符集都应该使用RFC2231的方案进行转义(通常不支持)。一些客户端将在报头中使用UTF-8或转义UTF-8;在大多数情况下,后者更可取。答案是正确的,但RFC2616在当今并不重要。