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

时间:2015-09-02 12:26:27

标签: php forms encoding character-encoding

我正在处理一个脚本,该脚本通过POST方法从网站上的表单接收数据。编码未知,但我想使用mb_detect_encoding()来检测收到的字符串的编码。

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

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

1 个答案:

答案 0 :(得分:3)

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

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

在您的服务器上,使用mb_check_encoding 确认您收到的数据确实是您所要求的UTF-8编码。如果不是......那取决于你想要做什么。出于所有意图和目的,您手上有随机垃圾数据;是否可以以任何方式挽救,取决于您的情况以及您尝试对数据做些什么。

FWIW,浏览器发送任何指示他们发送给您的编码。有些浏览器(* cough * old IE * cough *)也不总是遵守accept-charset属性,除非你强制它编码非ASCII字符;为了这个目的,网站倾向于在其中嵌入一个带有雪人角色的隐藏输入或类似的Unicode-y。

此外,如果浏览器出于某种原因不对UTF-8中的内容进行编码,但尝试发送非ASCII内容,则通常会发送HTML实体。这是你可以尝试检测的东西。