我们有一个 CGI 程序,它处理 POST-ed 表单。一些 POST-ed 文本可以包含非 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 字符集)并让收件人的电子邮件程序处理它。我打扰验证的唯一原因是确保表单不用于传播任意二进制文件(例如病毒)。
谢谢!