a href="tel:"に#(シャープ、ハッシュ)は使えない
aタグのhref属性には文頭に「tel:」を記述することで、電話発信用のリンクを設定することができます。
<a href="tel:01234567890">012-3456-7890</a>
このように記述すると、スマートフォンでこのリンクをタップすると、電話アプリから発信することができます。 ただし、この「tel:」の後ろに#(シャープ、ハッシュ)は使うことができません。
#を使う電話番号とは
頭文字に#がつく番号は「#(シャープ)特番」や「#(シャープ)ダイヤル」「着信短縮ダイヤル」「クイックダイヤル」と呼ばれるものです。 #0000のようにシャープと4桁の数字で使われています。 有名なところでは、以下のようなものがあります。見聞きしたこともあるのではないでしょうか。
- #8011 日本道路交通情報センター
- #9110 警察総合相談センター
- #9910 道路緊急ダイヤル
「着信短縮ダイヤル」「クイックダイヤル」ということからも察しがつくかと思いますが、 「クイックダイヤル」に登録されている、公式の電話番号に自動的に転送される仕組みになっています。 例えば、000-0000-0000という電話番号のクイックダイヤルが#0000に設定されていると、 #0000に電話すると、自動的に000-0000-0000に繋がるようになるわけです。
androidでは#を使っても発信できる方法がある
実際に、#を使うと、どのような挙動をするのか、こちらで検証しました。
スマホで上記のリンクをクリックすると、電話アプリが起動しますが、端末により挙動が違いました。 確認できた事象は下の二つです。
- 電話アプリに「#0000」という文字が表示されるものの、発信を押しても反応しない
- 電話アプリにそもそも「#0000」という値が渡されず、数字が表示されない
androidとiPhoneの両方とも、結局電話を発信することはできませんでした。 しかし、androidに関しては、書き方を工夫することで発信することができます。
It's working fine on Android , but on Iphone , i couldn't finish the call. I can see the #0000000 correctly when the confirm window is open , but when i select to call number, nothing passed.
引用元: Problem with hash (#) encoded (%23) with href="tel" on Iphone 7
「# を %23 と置き換えることで、android端末では発信できるけど、iPhoneでは発信できないよ」というお悩み投稿です。
<a href="tel://%2300000000"><span>#00000000</span></a>
こうやって工夫を凝らしても、結局iPhoneでは発信ができません。 お悩みへの回答も「公式な電話番号で書きなさい」「#は使えないよ」という回答ばかりです。 実際にスマホで↓のリンクから発信してみると、androidだけは動作するはずです。
なぜiPhoneでは#があると発信できない?
ではなぜiPhoneでは発信できないのか、ということなんですが、アップルのリファレンスに説明があります。
To prevent users from maliciously redirecting phone calls or changing the behavior of a phone or account, the Phone application supports most, but not all, of the special characters in the tel scheme. Specifically, if a URL contains the * or # characters, the Phone application does not attempt to dial the corresponding phone number.
引用元: Apple URL Scheme Reference
要するに、telに「#」や「*」等の特殊文字を使えるようにすると、悪意を持って電話やアカウントの挙動を変更される危険性があるため、appleはtelの記法に特殊文字は許可していない、ということらしいです。 そういうわけで、iPhoneで#があると発信できないのは、aタグがどうのこうのというよりも、apple製品の仕様ということです。
最後に
「別にiPhoneで発信できなくてもいいや」という状況はあまりないと思いますが、androidだけを対象にしている場合にのみ、前述したように#を%23に置き換えることで#を使っての電話発信を実現することができます。 ですが、そもそも「クイックダイヤル」は、「000-0000-0000」という長い数列を入力して電話をかける手間を省くために用意されているわけで、 スマホサイトで「お電話はこちら」というリンクをポチっと押すのも、十分手間を省いていることになりませんか? といことは、別に#から始まる番号で発信する必要ってないですよね? #0000にかけずに000-0000-0000にかけたら済むのではないでしょうか。 「aタグの中に#があって発信できない!」と悩んでいる方は、そのクイックダイヤルを調べて、正式な電話番号で記述することをオススメします。
ちゃんとスマホ用のリンクを指定すると、iPhoneでも遷移先のアンカー位置で表示されることが確認できました。