The tel: URI encoder turns an ordinary phone number into a valid RFC 3966 tel: URI — the format you put in an href to make a clickable call link or encode in a QR code. It handles international (global) and local numbers, optional extensions, and percent-encodes anything that needs it.
How it works
RFC 3966 distinguishes two number forms. A global number is fully international and begins with + followed by digits, e.g. tel:+14155550101. A local number has no country code and therefore must include a phone-context parameter — either a global number prefix (+1) or a domain (example.com) — so the dialler knows how to interpret it: tel:7042;phone-context=example.com.
The encoder strips visual separators (spaces, -, ., (, )) from the digits since RFC 3966 treats them as cosmetic. It then assembles the scheme, the number, and any parameters as ;name=value pairs. An extension is added as ;ext=NN. Parameter values containing reserved characters are percent-encoded.
Example
Input: (415) 555-0101 (global)
Output: tel:+14155550101
Input: 7042 (local), context example.com, ext 5
Output: tel:7042;ext=5;phone-context=example.com
Notes
Use a global + number whenever you can — it works regardless of where the caller is. Reserve local numbers with phone-context for intranet or extension-style dialling. The resulting URI drops straight into <a href="tel:...">. Everything runs locally; your number is never uploaded.