我想在我们的网站上标准化UTF8。我们所有的数据库和互联网资料都是UTF8。我们所有的Web服务器都在发送charset=utf-8
HTTP标头。但是我发现通过将我的Firefox(视图 - >字符编码)中的编码更改为其他内容,我可以将拉丁字符9字符输入到表单中,PHP只会将它们视为格式错误的UTF8。
我需要担心多少钱?用户的Web浏览器是否可以覆盖UTF8字符集标头并发送非UTF8?
更新:有几个人在个别表单上建议accept-charset
。但是,我宁愿不必更改每个Web表单。假设我可以控制HTTP内容类型标题,并将其设置为UTF8,我有什么可担心的吗?
答案 0 :(得分:11)
是否可以为用户的网站 浏览器覆盖utf8字符集 标题并发送非UTF8?
当然。您无法控制客户端,客户端可以执行任何操作,包括让用户覆盖正常编码并导致垃圾邮件(或垃圾邮件通过)发送到您的服务器。
那就是说,听起来你已经采取了大部分重要步骤。您的实际HTML文档是UTF-8编码并明确标记为这样,这意味着浏览器通常默认也会以该编码提交表单。 (请注意,HTML规范不要求这样。明确指定表单上的accept-charset是唯一符合规范的保证。)我怀疑这将在所有现代版本中按预期工作浏览器,您可以轻松地测试它。
在服务器上,您的作业始终,以便在您的服务非常重要的范围内验证您的输入。虽然绝大多数用户都是仁慈的并且使用现代标准浏览器,但HTTP协议是开放的,并且古怪的用户和恶意黑客都在那里,并且两者都可以抛出他们想要的任何类型的数据。确保在涉及安全性或经过身份验证的数据时不要对数据编码做出假设,并在将其推送到数据库之前对其进行清理。
答案 1 :(得分:4)
我认为最好的解决方案是在用户提交数据时转换为UTF-8并处理任何非UTF-8字符。如上所述,accept-charset="UTF-8"
不保证数据是UTF-8。而且,如果您必须更改整个站点的表单,那么这不是一个好的解决方案。
因此,在提交时处理输入可能是更好的方法。
答案 2 :(得分:3)
尝试将accept-charset属性添加到表单元素中。
答案 3 :(得分:2)
在表单元素上放置一个accept-charset =“UTF-8”元素,即使对页面内容进行编码,也会导致表单发布为UTF-8。