我正在编写一个脚本,通过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字符;出于这个目的,网站倾向于在其中嵌入带有雪人字符
此外,如果浏览器出于某种原因没有用UTF-8编码内容,而是试图发送非ascii内容,那么它通常会发送HTML实体。你可以试着检测一下