如何获取用于发送表单数据的编码提示(在PHP中)

如何获取用于发送表单数据的编码提示(在PHP中),php,forms,encoding,character-encoding,Php,Forms,Encoding,Character Encoding,我正在编写一个脚本,通过POST方法从网站上的表单接收数据。编码未知,但我想使用mb\u detect\u encoding()来检测所接收字符串的编码 现在有没有其他方法可以获得发送数据时可能使用的编码提示?浏览器可能会看到页面处于ISO-8859-1中,因此也会以该编码发送数据,并可能添加一些HTTP头来指示格式 获取字符集提示的典型来源是什么?如果您不知道编码,那么您已经丢失了。您需要确保编码尽可能符合定义。如果数据来自表单,请使用accept charset属性指定定义的编码;优选UTF

我正在编写一个脚本,通过POST方法从网站上的表单接收数据。编码未知,但我想使用
mb\u detect\u encoding()
来检测所接收字符串的编码

现在有没有其他方法可以获得发送数据时可能使用的编码提示?浏览器可能会看到页面处于
ISO-8859-1
中,因此也会以该编码发送数据,并可能添加一些HTTP头来指示格式


获取字符集提示的典型来源是什么?

如果您不知道编码,那么您已经丢失了。您需要确保编码尽可能符合定义。如果数据来自表单,请使用
accept charset
属性指定定义的编码;优选UTF-8:

<form accept-charset='utf-8'>

在您的服务器上,使用
mb\u check\u encoding
确认收到的数据确实按照您的要求进行了UTF-8编码。如果不是。。。你想做什么取决于你自己。无论出于何种目的,你手上都有随机垃圾数据;您是否能够以任何方式挽救这些数据取决于您的情况以及您试图对数据做什么

FWIW,浏览器不会向您发送任何编码指示。一些浏览器(*cough*old IE*cough*)也不总是遵守
accept charset
属性,除非您强制它编码非ASCII字符;网站倾向于嵌入带有雪人角色的隐藏输入☃ 或者类似于Unicode-y的东西


此外,如果浏览器出于任何原因不以UTF-8编码内容,而是尝试发送非ASCII内容,则通常会发送HTML实体。这是您可以尝试检测到的。

听起来像是编写Web服务和标准化API的完美案例,其他人可以对其进行编码,而不是您接受随机的公开帖子。@Dave:当然,但目前我需要介绍用户不提供编码(正确)的情况。因此,每一个给我编码提示的源代码都应该通过
mb\u detect\u encoding()
来改进检测。如果你通过web服务这样做,那么你就不必太担心编码问题在于检测——它不是傻瓜式的,事实上,浏览器向你发送不正确的详细信息是非常简单的。您最好假设它是一个完整的utf-8,并使用它来覆盖90%的电位,而不是直接检测。@Dave:所以我的问题是:浏览器使用哪个
通道来发送(甚至可能是错误的)有关用于发送数据的字符集的信息?是否有我可以解析的标题字段,或者可能要填充的
$\u POST
字段,…?这也可以通过$\u服务器['HTTP\u ACCEPT\u CHARSET']访问,我相信,但仍然依赖于在表单端指定它。ACCEPT-CHARSET允许客户端(浏览器)指定它希望服务器返回的字符集。它本质上没有说明客户端在向服务器发送数据时使用了什么字符集。