永远不要相信输入。但是对于字符编码也是如此?好的做法是控制接收到的字符串的编码,以避免意外错误?有些人使用preg_match来检查无效字符串。其他人为字节创建一个控制字节来验证它。谁使用iconv标准化。检查的最快和最安全的方法是什么?
修改
我注意到如果我尝试在我的mysql数据库中保存字符串utf-8已损坏,则该字符串将被截断而不会发出警告。这种可能性有对策吗?
答案 0 :(得分:3)
良好做法是控制收到的字符串的编码,以避免意外错误?
没有。没有可靠的方法来检测传入数据的编码 * ,因此通常的做法是定义期望编码:
如果您要公开某种API,或者是从第三方网站获取请求的脚本,您通常会在文档中指出您期望的编码。
如果您的网站上有表单提交给脚本,您通常会使用一个使用哪个字符集的网站范围。
如果声明的编码与数据的实际编码不匹配,则数据进入的可能性总是存在。在这种情况下,您的应用程序应该设计为没有错误,除了字符以错误的方式显示。
查看请求声明传入数据的编码类似于@Ignacio建议是非常有趣的想法,但我从未见过它在PHP世界中实现过。这并不是说任何反对它,但你问的是常见的做法。
*: 经常可以验证传入数据是否具有特定编码。例如,UTF-8具有特定的字节值,这些字节值不能独立存在,而是形成多字节字符。 ISO-8859-1特殊字符与这些值重叠,因此在UTF-8中被检测为无效。但从任意数据集中检测一个完全未知的编码几乎是不可能的。
答案 1 :(得分:0)
查看字符集specified in the request。
答案 2 :(得分:0)
您的网站发布网络服务或生成表单,您可以指定您期望的编码。因此,如果输入通过验证,一切正常。如果不是,你不需要注意为什么它没有通过。如果是由于编码错误,那不是你的错。