[英]How to validate POST-ed strings as valid UTF-8 (in C)?
我们有一个CGI程序,可以处理POST形式。 某些POST版本的文本可以包含非ASCII字符-浏览器已经可以将它们转换为UTF-8。
我需要“强化”程序以拒绝无效的字符串-其中非ASCII字符串也不是有效的UTF-8字符串。
我以为,我会依靠mbstowcs():
setlocale(LC_CTYPE, "en_US.UTF-8");
unilen = mbstowcs(NULL, foo, 0);
if (unilen == (size_t)-1) {
... report an error ...
}
但是,我很难验证该方法-它可以接受有效的字符串,但是我不能提出一个无效的字符串来拒绝该方法...
能否请某人确认这是正确的方法和/或建议替代方法?
请注意,我不在乎转换的实际结果-一旦我确信该字符串是有效的UTF-8,就将其复制到电子邮件中(使用UTF-8字符集),然后收件人的电子邮件程序处理它。 我烦恼验证的唯一原因是要确保该表单不用于传播任意二进制文件(例如病毒)。
谢谢!
功能文档说
“如果遇到无效的多字节字符,将返回(size_t)-1值。”
因此,我相信您的验证是可以的。 就个人而言,我总是发现该值因无效数据而损坏。 您可以确定偶数长度的任意十六进制序列。
如果您不确定并需要进一步验证,可以选择gnu iconv
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.