输入utf-8 - 验证?

时间:2011-04-18 08:53:05

标签: php utf-8 character-encoding

永远不要相信输入。但是对于字符编码也是如此?好的做法是控制接收到的字符串的编码,以避免意外错误?有些人使用preg_match来检查无效字符串。其他人为字节创建一个控制字节来验证它。谁使用iconv标准化。检查的最快和最安全的方法是什么?

修改

我注意到如果我尝试在我的mysql数据库中保存字符串utf-8已损坏,则该字符串将被截断而不会发出警告。这种可能性有对策吗?

3 个答案:

答案 0 :(得分:3)

  

良好做法是控制收到的字符串的编码,以避免意外错误?

没有。没有可靠的方法来检测传入数据的编码 * ,因此通常的做法是定义期望编码:

  • 如果您要公开某种API,或者是从第三方网站获取请求的脚本,您通常会在文档中指出您期望的编码。

  • 如果您的网站上有表单提交给脚本,您通常会使用一个使用哪个字符集的网站范围。

如果声明的编码与数据的实际编码不匹配,则数据进入的可能性总是存在。在这种情况下,您的应用程序应该设计为没有错误,除了字符以错误的方式显示。

查看请求声明传入数据的编码类似于@Ignacio建议是非常有趣的想法,但我从未见过它在PHP世界中实现过。这并不是说任何反对它,但你问的是常见的做法。

*: 经常可以验证传入数据是否具有特定编码。例如,UTF-8具有特定的字节值,这些字节值不能独立存在,而是形成多字节字符。 ISO-8859-1特殊字符与这些值重叠,因此在UTF-8中被检测为无效。但从任意数据集中检测一个完全未知的编码几乎是不可能的。

答案 1 :(得分:0)

查看字符集specified in the request

答案 2 :(得分:0)

您的网站发布网络服务或生成表单,您可以指定您期望的编码。因此,如果输入通过验证,一切正常。如果不是,你不需要注意为什么它没有通过。如果是由于编码错误,那不是你的错。