我想知道PHP究竟是如何检测来自HTTP请求的输入数据的编码。
想象一下API接受来自不同客户端的请求(可能是移动应用程序,而不是来自浏览器)。传入请求具有标头Content-Type: multipart/form-data
,因此,没有给出其他编码信息。
让我们说POST主体中有一个文本字段,我想在其上应用验证。 我如何知道我应该使用的编码?
我在文档中找不到明确的答案,所以请帮忙。我想,我可能会看看具有mb_check_encoding()
的Mbstring扩展,它可以用于此目的。这是一种可靠的方式吗?
客户端如何说出发送multipart/form-data
POST请求时使用的编码:
正如RFC-7578所说(https://tools.ietf.org/html/rfc7578#section-4.4)multipart/form-data
有效负载的每个部分都可以拥有自己的Content-Type
信息。这解决了传递编码信息的问题。
答案 0 :(得分:0)
好的,实际上有两个问题:
multibyte/form-data
方法进行传输); 第一个问题是通信问题,可以通过阅读文档以及在请求有效负载内为文本部分提供额外的显式标头来解决。有关详细信息,请参阅RFC-7578。
第二个问题没有适当的解决方案。很难检测用于组合文本的实际编码。但是,您可以使用mb_detect_encoding()等函数进行猜测。