2

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

ありがとう!

4

1 に答える 1

0

関数のドキュメントによると

「無効なマルチバイト文字が検出された場合、(size_t)-1 の値が返されます。」

だから私はあなたの検証がかなりうまくいっていると信じています。個人的には、無効なデータのためにこの値が壊れていることが常にわかりました。確実にするために、偶数の長さの任意の 16 進シーケンスを送信する場合があります。

疑問があり、さらに検証が必要な場合は、gnu iconv が良い代替手段です

SO での utf-8 検証

于 2012-10-15T18:00:04.163 に答える