不可視文字検出ツールとは?

見えない文字検出ツールは、ゼロ幅スペース、ソフトハイフン、ノーブレークスペースなど、テキストに潜む不可視のUnicode文字をスキャンします。これらの文字はコードのバグを引き起こしたり、コピー&ペーストの不具合を生じさせたり、悪意のあるコンテンツを隠したりする可能性があります。任意のテキストを貼り付けると、各不可視文字がUnicode名と位置とともに即座に表示されます。

検出器は6つのカテゴリーをスキャンします:ゼロ幅文字(U+200B、U+200C、U+200D)、方向制御マーク(LRM、RLM)、異体字セレクタ、制御文字、特殊な空白(改行不可、em-quad、ヘアスペース)、その他の珍しい不可視文字。検出されたものはUnicode名・16進コードポイント・位置・カテゴリーが一覧表示され、カテゴリー絞り込みやワンクリックでのクリーン版コピーに対応します。

使い方

  1. テキストを入力欄に貼り付けるか直接入力してください — 入力と同時に不可視文字が自動検出されます。
  2. 検出結果では各不可視文字のUnicode名(例:U+200B ゼロ幅スペース)、位置、前後の文脈が強調表示されます。
  3. フィルターで削除するカテゴリを選び、「テキストを整理」をクリックします。整理後の結果はコピーまたはダウンロードできます。

使用するタイミング

  • Webからコピーしたコードで原因不明の構文エラーが出るときの原因究明。
  • ユーザー投稿テキストをDBに保存する前にサニタイズする工程。
  • 怪しいメールや文書に同形異字や紛れ込ませたUnicodeが含まれていないか確認する。

結果

ウェブサイトからコピーしたコードを貼り付けたところ、構文エラーが続いて発生しています。検出ツールを使うと、変数名の間に2つのゼロ幅スペース(U+200B)が隠れており、さらに行末に右から左へのマーク(U+200F)があることが判明します。エディターでは見えませんが、コンパイラーがエラーを出す原因はこれらの文字でした。

よくある質問

ゼロ幅スペースって何?なぜコードが壊れるの?
U+200Bは元々アジア言語の組版用に設計された不可視文字です。コードに混入すると文字の間に座って表示はされないので、'const foo'はコンパイラから見れば'const⁠foo'という未知の識別子になり、その時点でエラーになります。
不可視文字は必ず悪者?それとも正当な使い道もある?
正当な用途も多くあります。ゼロ幅結合子は家族絵文字を組み立てますし、異体字セレクタは絵文字の見た目を切り替え、ノーブレークスペースは名前の途中で改行されないよう守ります。検出器はこれを分類するので、必要なものは残し、不要なものだけ落とせます。
不可視文字は悪用される?
されます。フィッシングメールでは双方向オーバーライド文字(U+202E)を仕込んで'invoice.exe'を'invocxe.pdf'のように表示し、開かせようとする例があります。プロンプトインジェクション攻撃でも見かけます。検出器に通せば、こうした隠し技は即座に露呈します。
「クリーンテキスト」は全ての不可視文字を消す?それとも一部だけ?
現在のフィルタ設定で検出された不可視文字をすべて消します。「スペース」カテゴリーをオフにしていれば、変則的なスペースは触られません。完全に取り除きたい場合は、6カテゴリーをすべて有効にしてからクリーンしてください。
普通の半角スペースや改行も検出されますか?
されません。ASCIIの半角スペース(U+0020)、タブ(U+0009)、改行(U+000A/U+000D)はそもそも想定どおりなのでデフォルトで除外されます。報告されるのはノーブレークスペース、ヘアスペース、en-spaceといった変則的な空白だけで、本当の異常に焦点が当たります。

関連ツール