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



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

现在有办法获得额外的提示,什么编码可能已被用于发送数据?浏览器可能会看到该页面是ISO-8859-1格式,因此也会以该编码发送数据,并可能添加一些http头来指示格式。

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

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

<form accept-charset='utf-8'>
在您的服务器上,使用mb_check_encoding 确认接收到的数据确实是您所请求的UTF-8编码。如果不是……你想做什么由你自己决定。出于所有的意图和目的,你有随机的垃圾数据在手;你是否能以任何方式挽救它取决于你的情况和你试图用数据做什么。

顺便说一下,浏览器不发送任何指示它们发送给你的编码。一些浏览器(*咳*旧IE*咳*)也不总是尊重accept-charset属性,除非你强制它编码一个非ascii字符;出于这个目的,网站倾向于在其中嵌入带有雪人字符或类似Unicode-y的隐藏输入。

此外,如果浏览器出于某种原因没有用UTF-8编码内容,而是试图发送非ascii内容,那么它通常会发送HTML实体。你可以试着检测一下

最新更新