ゼロ幅スペース(ZWS)の検出と削除

URL、コード、文字列比較を壊す不可視のゼロ幅スペース文字(U+200B)を検出します。即座に可視化して除去します。

Zero-Width Characters

詳細な説明

ゼロ幅スペース:不可視のバグ

ゼロ幅スペース(ZWS、U+200B)はUnicodeで最もフラストレーションを引き起こす文字の一つです。まったく可視的な幅を持たないため、テキストエディタ、ターミナル、Webブラウザで完全に不可視ですが、文字列比較、パース、処理に影響する実際の文字です。

ZWS文字の発生源

  • Webページのコピーペースト:HTMLエディタやCMSプラットフォームがテキスト整形や改行ヒントのためにZWS文字を挿入することがよくあります。
  • メッセージアプリ:Slack、Discord、Teams、WhatsAppがペーストされたコンテンツにZWSを挿入することがあります。
  • 国際化:ZWSは明示的なスペースのないスクリプト(タイ語、クメール語、ミャンマー語)で改行の機会として使用されます。
  • ステガノグラフィー:ZWS文字をテキストに隠された情報の埋め込み(ウォーターマーキング)に使用できます。
  • リッチテキストエディタ:WYSIWYGエディタが空の要素でカーソル位置を維持するためにZWSを挿入します。

ビジュアライザーの表示方法

各ゼロ幅スペースは可視化出力で赤い**[ZWS]**マーカーとして表示されます。統計パネルが合計カウントを表示します。

実際の問題

// これらは同じに見えますが等しくありません:
const a = "hello";          // クリーン
const b = "hel\u200Blo";   // lとlの間にZWS

a === b  // false!
a.length // 5
b.length // 6

ZWSは以下も壊します:

  • URLパース:URL内のZWSはURLを無効にする
  • メールアドレス:メール内のZWSは配信失敗を引き起こす
  • JSONキー:見た目が同じでもZWSにより異なる2つのキー
  • 正規表現マッチング:パターンhellohel\u200Bloにマッチしない
  • データベースクエリ:WHERE句がレコードを見つけられない

ZWS文字の削除

CleanセクションでZWSトグルを有効にし、Cleanをクリックします。より広範なクリーンアップには、ZWJZWNJも有効にしてすべてのゼロ幅文字を一度に削除します。

ユースケース

QAエンジニアが、検索語句が正しく見えるのに検索機能が特定のレコードを見つけられないと報告します。開発者が失敗する検索語句をホワイトスペースビジュアライザーに貼り付けると、Jiraチケットの説明からコピーされた単語の中間にゼロ幅スペースが発見されます。

試してみる — Whitespace Visualizer

フルツールを開く