POST フォームを処理する CGI プログラムがあります。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 文字セットで) 電子メールにコピーし、受信者の電子メール プログラムで処理されます。私が検証を気にする唯一の理由は、フォームが任意のバイナリ (ウイルスなど) を広めるために使用されていないことを確認することです。
ありがとう!