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