Invisible Texts

テキストツール

ゼロ幅スペース生成ツール

ゼロ幅スペース(U+200B)をコピー。ブラウザやテキストエンジンに対して、ハイフンもスペースも消費せずに行が折り返せる位置を知らせるゼロ幅のフォーマット文字です。

ライブ生成
ゼロ幅スペースを生成
コピーする U+200B の数を選択
太字 の出力

ゼロ幅スペースの用途

ゼロ幅スペース(ZWSP、U+200B)は、可視グリフも送り幅も持たない Unicode のフォーマット文字です。その役割は、レンダリングエンジンに行が折り返せる位置を知らせること。HTML の <wbr> 要素と同じ挙動です。ブラウザやワープロソフトは、長い文字列を折り返す際にこれらの改行候補を参照します。長い URL の各スラッシュの後に U+200B を置けば、コンテナからはみ出す代わりにその位置で綺麗に折り返されます。この文字は、タイ語・ラオス語・クメール語のような単語間にスペースを置かないスクリプトのために作られました。単語間に U+200B を挿入すれば、レンダラがそこで折り返せます。ラテン文字テキストでは用途が異なり、Twitter の @メンションや #ハッシュタグの自動リンク化を阻止する、ドイツ語の長い複合語を分割する、長い識別子の中に目立たない改行ポイントを仕込む、といった使い方がされます。

U+200B が本当に役立つ場面

長い URL や文字列の折り返し

長い URL の各スラッシュやピリオドの後に U+200B を置けば、ブラウザはレイアウトからはみ出す代わりにその位置で折り返します。折り返し点にハイフンは現れません。

投稿内の自動リンク防止

Twitter などは @username や #hashtag をリンクに変換します。記号と文字の間にゼロ幅スペースを挟めば、見た目を変えずにマッチングを壊せます。

CSS での改行制御

U+200B を word-break: keep-all と組み合わせれば、CJK テキストの他の箇所での折り返しを抑制しつつ、許可する改行位置をマークできます。CSS Text 仕様がこのパターンを意図された用法として明記しています。

テキストのウォーターマーキング

文書の任意の位置に U+200B を挿入すれば、コピー&ペーストを生き残り、読者には見えない指紋ができます。受け取った人ごとに異なるパターンを配れます。

U+200B のエッジでの挙動

U+200B はフォーマット文字(一般カテゴリ Cf)であり、スペースではありません。この区別は重要です。ホワイトスペースではないため JavaScript の trim() では除去されません。一方で不可視でもあるため、人間には同じに見える文字列がバイトレベルでは異なり得ます。セキュリティ研究者はこの性質を利用して識別子にペイロードを隠してきました。「admin」と描画される 2 つの文字列は、片方に U+200B が含まれていればデータベースにとっては別物になります。Trojan Source の一連の開示(CVE-2021-42574 と CVE-2021-42694)は、不可視 Unicode 文字がソースコードを画面の見た目と異なる挙動でコンパイルさせ得ることを文書化しました。レンダリング面では、U+200B はブラウザで広くサポートされますが、入力をサニタイズするチャットアプリでは stripping されます。WhatsApp と TikTok はメッセージやバイオからこれを除去し、Discord はフィールドごとに対応が一貫しません。プラットフォームが stripping する場合、フォールバックは通常 U+2800(点字ブランク)のような可視だが空白の文字です。

U+200B を使う前のメモ

  • U+200B は改行候補を「許可」するだけで「強制」はしません。実際に折り返すかは、利用可能な幅に基づいてレンダラが決定します。
  • 折り返し点にハイフンは一切出ません。折り返し時の可視ハイフンが必要なら、代わりにソフトハイフン(U+00AD)を使ってください。
  • U+200B はホワイトスペースに分類されないため、JavaScript の trim() では除去されません。除去したい場合は U+200B を対象にした正規表現を使ってください。
  • 許可ではなく禁止を意図する場合は U+2060(word joiner)を使います。U+200B の逆であり、非推奨となった U+FEFF の現代の代替です。
  • 入力をサニタイズするチャットアプリは U+200B をよく stripping します。空白メッセージやユーザー名には U+2800 や U+3164 に切り替えてください。
  • U+200B をハッシュタグや @メンションの中に置くとリンクが壊れます。CSS の @media ルールを言及してプロフィールリンクを発火させたくない場合などに便利です。

ゼロ幅スペースが機能する場所

U+200B はすべてのモダンブラウザとほとんどのワープロソフトでサポートされ、改行候補位置として機能します。CSS Text Module 仕様は <wbr> 要素と並んでこれを折り返し位置のマーカーとして明示的に参照しています。チャットアプリやソーシャルメディアでは対応がよりまちまちです。WhatsApp、Instagram、Discord は一部の欄では受け付け、別の欄では stripping します。TikTok はバイオから除去します。ゲームプラットフォームがユーザー名で受け付けることは稀です。経験則としては、ブラウザやテキストエディタでは U+200B は信頼できますが、チャットアプリやソーシャル入力では事前にテストし、U+2800 や U+3164 をフォールバックとして用意してください。

U+200B に関するよくある質問

ゼロ幅スペースは実際に何をするのですか?

行が折り返しを許可される位置をマークします。文字そのものは不可視で幅も持ちませんが、長い行をどこで折り返すか決めるブラウザやテキストエンジンは、U+200B を許容される改行点として扱います。ハイフンは挿入されません。

U+200B は通常スペースとどう違いますか?

通常スペース(U+0020)は可視の幅を持ち、ホワイトスペースです。U+200B はゼロ幅で、ホワイトスペースではなくフォーマット文字であり、目に見える隙間を一切作りません。唯一の機能は、単語や文字列中の選択した位置で改行を許可することです。

ゼロ幅スペースをどうコピーしますか?

上でカウントを指定し、「コピー」をクリックします。文字は何の表示もなくクリップボードに入ります。これは想定通りの挙動で、テスト欄に貼り付けて到着を確認してください。

ゼロ幅スペースは検出できますか?

はい。固定のコードポイント(U+200B)を持つため、Unicode を調べるツールならすべて見つけられます。このコードポイントを対象にした検索で、すべての出現箇所を特定できます。人間には見えなくても、ソフトウェアには見えます。

ゼロ幅スペースが stripping されたのはなぜですか?

プラットフォームの入力サニタイザが除去しました。チャットアプリやソーシャルプラットフォームは悪用を防ぐためゼロ幅フォーマット文字をよくフィルタします。記号と文字に分類される点字ブランク(U+2800)やハングルフィラー(U+3164)に切り替えてください。これらはフィルタを生き残りやすいです。

U+200B は HTML の <wbr> タグと同じですか?

実質的に同じです。MDN の文書でも <wbr> は U+200B コードポイントと同じ挙動をすると説明されています。どちらも可視グリフを持たず、ハイフンを出さない改行候補位置をマークします。HTML マークアップには <wbr> を、プレーンテキストには U+200B を使います。