ゼロ幅スペース(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つのキー
- 正規表現マッチング:パターン
helloはhel\u200Bloにマッチしない - データベースクエリ:WHERE句がレコードを見つけられない
ZWS文字の削除
CleanセクションでZWSトグルを有効にし、Cleanをクリックします。より広範なクリーンアップには、ZWJとZWNJも有効にしてすべてのゼロ幅文字を一度に削除します。
ユースケース
QAエンジニアが、検索語句が正しく見えるのに検索機能が特定のレコードを見つけられないと報告します。開発者が失敗する検索語句をホワイトスペースビジュアライザーに貼り付けると、Jiraチケットの説明からコピーされた単語の中間にゼロ幅スペースが発見されます。