上の写真の人物は、コンピュータ ウイルスに関する研究やコンピュータ セキュリティに関するTED トークで知られるコンピュータ セキュリティの専門家であるMikko Hyppönenによって数か月前にツイートされました。SOに関しては、その画像のみを投稿しますが、あなたはそのアイデアを理解しています. 明らかに、Web サイト全体に広めて訪問者をびっくりさせたいものではありません。
さらに調べてみると、この文字は 87 を超える発音区別記号 (制限はありますか?!) を組み合わせたタイのアルファベットの文字のように見えます。これにより、セキュリティ、ローカリゼーション、およびこの種の入力を処理する方法について考えるようになりました。私の検索では、Stack に関するこの質問にたどり着きました。次に、Michael Kaplan のブログ投稿 on stripping diacriticsにたどり着きました。その中で、彼は文字列をその「基本」文字に分解する方法を示しています (ここでは簡潔にするために簡略化しています)。
StringBuilder sb = new StringBuilder();
foreach (char c in "façade".Normalize(NormalizationForm.FormD))
{
if (char.GetUnicodeCategory(c) != UnicodeCategory.NonSpacingMark)
sb.Append(c);
}
Response.Write(sb.ToString()); // facade
場合によってはこれがどのように役立つかはわかりますが、ユーザー入力に関しては、すべての分音記号を取り除くことになります。カプランが指摘するように、一部の言語では分音符号を削除すると、単語の意味が完全に変わる可能性があります。これは疑問を投げかけます:ユーザーの入力/出力で一部の分音符号を許可し、ミッコ・ヒッポーネンのユーバー文字などの他の極端なケースを除外するにはどうすればよいでしょうか?