ユーザはtextareaのhtml入力にコピー&ペーストすることができ、無効なUTF-8文字を貼り付けることができます(たとえば、タブを含むrtfファイルからコピー&ペーストするなど)。javascript文字列が有効かどうかをチェックする
文字列が有効なUTF-8であるかどうかを確認するにはどうすればよいですか?
ユーザはtextareaのhtml入力にコピー&ペーストすることができ、無効なUTF-8文字を貼り付けることができます(たとえば、タブを含むrtfファイルからコピー&ペーストするなど)。javascript文字列が有効かどうかをチェックする
文字列が有効なUTF-8であるかどうかを確認するにはどうすればよいですか?
"UTF-8文字"とは何かを誤解していると思います。 UTF-8は、記録された人間の歴史に存在していたすべての単一の文字とグリフをかなり表すことができるUnicodeのエンコーディングです。そのため、「無効な」UTF-8文字はありません。
RTFは、ASCII、UTF-8、UTF-16などのRTFを使用することができます。 HTMLのテキストボックスはプレーンテキストのみを扱うため、RTFフォーマットは自動的に取り除かれます(あなたがそうでないと思われる「リッチエディット」コンポーネントを使用している場合を除く)。
しかし、空白文字(タブなど:\t
)は、Unicode(したがって、UTF-8)で表現されています。これらの文字を含む文字列は "有効なUTF-8"ですが、ビジネス要件に関する限り無効です。私はちょうどストリッピングアウト不要な文字を不可視文字(ここから:Match non printable/non ascii characters and remove from text)に一致する正規表現を使用することをお勧めし
textBoxContent = textBoxContent.replace(/[^\x20-\x7E]+/g, '');
しないコードポイントの範囲0x20
で任意の文字に一致し[^\x20-\x7E]
式(32 、通常の空白文字' '
)から0x7E
(127、小文字'~'
文字)を除くすべての文字は削除されます。
のUnicodeの最初の127個のコードポイントがASCIIと同一であり、ここで見ることができます:http://www.asciitable.com/
この回答の誤解を訂正するには、UTF8の "文字"などはありません。 Unicodeコードポイントをエンコードする "UTF8バイトシーケンス"があり、これらのバイトシーケンスはバイトシーケンス内の不正な値を絶対に受けます。同様に、 "orthographic constructs"と数値コード*の正式なマッピングとしてのUnicodeは、使用できない特定の数字を持っています。不正なバイトシーケンス、または不正な数値を含むデコードされたUnicodeシーケンスを持つUTF8バイトストリームが発生する可能性があります。つまり、無効なUTF-8文字があります。 –
ジャストアイデア:
function checkUTF8(text) {
var utf8Text = text;
try {
// Try to convert to utf-8
utf8Text = decodeURIComponent(escape(text));
// If the conversion succeeds, text is not utf-8
}catch(e) {
// console.log(e.message); // URI malformed
// This exception means text is utf-8
}
return utf8Text; // returned text is always utf-8
}
'escape'は非推奨です。使用しないでください(Unicodeを正しく処理できないため) – Quentin
あなたを助けることもできるhttp://stackoverflow.com/questions/20639052/check -if-the-bytes-sequence-is-valid-utf-8-sequence-in-javascript –
[JavascriptでユーザーのUTF-8名を検証しています](http://stackoverflow.com/questions/6381752/) validating-users-utf-8-name-in-javascript) – Abhijit