繁体   English   中英

如何验证POST版本的字符串为有效的UTF-8(在C语言中)?

[英]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

utf-8验证

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM