Incorrect decoding of tel:// url with two #

This isn’t a common problem, I imagine. But the behavior was unexpected to me.

Steps to reproduce

Create a note with this text

Dial [\*3001#12345#\*](tel://*3001#12345#*)

Click the link.

Expected result

A link will open in the phone app (or, more accurately, a prompt will appear confirming that you want to call the number). The number to be called should be as it is entered in the url: *3001#12345#*.

Actual result

The url that gets opened, and the number that gets called, is *3001#1234523*.

The second # seemingly got url-encoded into %23, but the % got lost somewhere and we are left with only the 23.

Environment

  • Operating system: iOS 16
Debug info
SYSTEM INFO:
	Operating system: ios 16.0.2 (Apple iPhone)
	Obsidian version: 1.3.2 (69)
	API version: v0.15.9
	Login status: not logged in
	Live preview: on
	Legacy editor: off
	Base theme: dark
	Community theme: none
	Snippets enabled: 0
	Restricted mode: off
	Plugins installed: 1
	Plugins enabled: 0

RECOMMENDATIONS:
	none

Additional information

As a workaround, if I manually url-encode the first # myself, the link works as expected. But only the first one matters; if I url-encode the second # but not the first then I still get the unexpected result from above.

Using this url in the link works:

tel://*3001%2312345%23*

And this works:

tel://*3001%2312345#*

Inserting that as the url in the note above and clicking the link will dial *3001#12345#* as expected.

But this does not work:

tel://*3001#12345%23*

That link has the same behavior as the first example with no manual url-encoding.

This not really a bug. you must urlencode urls.