連絡先からコピーした電話番号を貼り付ける際の注意点

連絡先からコピーした電話番号を貼り付ける際の注意点

連絡先からコピーした電話番号を Web フォームに貼り付けるときに困ったことはありませんか? よくある問題ではないかもしれませんが、TidBITS 読者の Dave Fultz がオンライン注文フォームでのイライラする格闘の末に解決した問題です。 

デイブはフランスで荷物を注文しようとしていたのですが、フォームに配送先の携帯電話番号の入力を求められました。入力内容が正しいか確認するため、連絡先からコピーしてフォームに貼り付けましたが、「送信」をクリックしても認証に失敗しました。電話番号の形式をいろいろ試してみましたが、フランスでは10桁の番号の先頭の0は国内通話の場合は含め、海外通話の場合は省略する必要があります。しかし、どれも効果はありませんでした。いくつかのオンライン認証サービスに番号を貼り付けても失敗しました。プレーンテキストで貼り付けても効果はありませんでした。

そこでデイブは友人にその番号にテキストメッセージを送信しました。これは問題なく機能し、フランス人に伝えるのと同じ方法で番号を送ってほしいと頼みました。デイブが送った番号と見た目は同じでしたが、メッセージスレッドからコピー&ペーストすると、フォームがそれを承認しました!一体何が起こっているのでしょうか?

デイブは、ターミナルで Python スクリプトを使用して、連絡先から取得した番号と友人から送信された番号を比較することを計画していましたが、番号をターミナルに貼り付けると、以下の私のテストで強調表示されたテキストに見られるように、電話番号の両側に余分な文字が表示され、問題がすぐに明らかになりました。

ターミナルでのUnicode文字のデモンストレーション

Macの連絡先アプリでは、すべての電話番号が2つのゼロ幅(つまり非表示)のUnicode文字、U+202D (左から右への上書き)とU+202C (POP方向書式)で囲まれていることが判明しました。Daveは、これらの文字によって電話番号が周囲のテキストフローの方向(例えばヘブライ語やアラビア語では右から左への表記)から除外されているのではないかと推測しました。

連絡先はこれらの文字を電話番号と一緒に保存しているようですが、これらの文字はゼロ幅なので、私が見つけた選択を避ける方法はないようです。連絡先がこれらの文字をコピーの一部として番号に追加しているとは思えません。なぜなら、番号の途中の文字をいくつか選択してからターミナルにコピーして貼り付けると、非表示の文字は表示されないからです。また、これらの文字は電話番号フィールドに固有のもので、メモフィールドに保存された番号にも含まれません。最後に、この問題は Mac の連絡先に限定されています。私のテストでは、iPhone または iPad からコピーした電話番号では問題は発生しませんでした。(その後の調査で、この問題について説明しているAsk Different スレッドが見つかりました。これは Apple にバグとして報告されており、macOS 13.1 Ventura でもまだ存在していることが確認されました。)

なぜこれらの文字はそれほど問題を引き起こさないのでしょうか?開発者は、データを受け入れるアプリを設計する際に、不要なデータをフィルタリングする入力フィルターを作成するのが一般的です。電話番号入力欄に非表示の句読点文字を受け入れる理由はないので、そのような文字を削除するのがプログラミング上の賢明な方法です。少なくとも、ユーザー入力のフィルタリングはセキュリティ対策として不可欠です。なぜなら、攻撃者はシステムにデータを入力させ、悪意のあるコードを挿入したり、バッファオーバーフローを引き起こして悪用しようとするからです。

Appleの連絡先アプリがすべての電話番号をゼロ幅文字で囲むように設計しているのは奇妙に思えますが、右から左に書くテキストフローに貼り付けられた電話番号が変更されないように保護しています。しかし、連絡先アプリがすべてのMacユーザーに対してこれを行う必要はないようです。Appleは、それが適切なタイミングを特定しようと試みるべきでしょう。おそらく、ユーザーがmacOSの「言語と地域」設定で右から左に書く言語を有効にしている場合のみでしょう。

言語と地域設定パネルのヘブライ語とアラビア語

現実的に言えば、連絡先からコピー&ペーストした電話番号が期待通りに動作しない場合、最も簡単な解決策は手動で番号を入力することです。あるいは、ターミナルに貼り付けて電話番号だけを再度コピーすることで、両側の余分なUnicode文字を回避することも可能です。 

この問題に頻繁に遭遇し、ちょっとしたギークポイントを稼ぎたいなら、余分な文字を自動的に削除するKeyboard Maestroマクロを作成することができます。動物のように数字を何度も入力しなければならないことに腹を立てたDave Fultz氏は、まさにそれを実現しました。彼のマクロを出発点として、自分に合ったワークフローを構築することができます。

あるいは、私と同じように、代わりに連絡先管理アプリCardhopを使うこともできます。Cardhop はこの問題に悩まされることはなく、はるかに快適に使用できます (「Cardhop は連絡先を最前面に配置」、2017 年 10 月 18 日、および「Cardhop 2.0 が Flexibits Premium に Fantastical をバンドル」、2021 年 5 月 27 日を参照)。

Idfte
Contributing writer at Idfte. Passionate about sharing knowledge and keeping readers informed.