Android 浏览器应该在启动应用程序之前对自定义URI进行编码吗?

Android 浏览器应该在启动应用程序之前对自定义URI进行编码吗?,android,html,google-chrome,uri,url-encoding,Android,Html,Google Chrome,Uri,Url Encoding,我有一个应用程序在自定义URI上启动,看起来像myapp://whatever/something 有一个HTML页面,其href链接如下->myapp://whatever/?x=abc;y=pqr 当在chrome中单击此按钮时,myapp将获得URLmyapp://whatever/?x=abc%3By%3Dpqr%3B,URL将被编码 但是,当我单击默认Internet浏览器上的同一链接时,没有进行编码。它获取原始URL->myapp://whatever/?x=abc;y=pqr 正确

我有一个应用程序在自定义URI上启动,看起来像
myapp://whatever/something

有一个HTML页面,其href链接如下->
myapp://whatever/?x=abc;y=pqr
当在chrome中单击此按钮时,myapp将获得URL
myapp://whatever/?x=abc%3By%3Dpqr%3B
,URL将被编码 但是,当我单击默认Internet浏览器上的同一链接时,没有进行编码。它获取原始URL->
myapp://whatever/?x=abc;y=pqr

正确的行为是什么


我在安卓4.4.3上用Chrome38.0.2125.114试过这个。另外,我认为Chrome的早期版本没有做到这一点,但不是很确定。

URL中分号的处理方式并不完全一致,因此最好的方法是正确无误地转义URL

如果要将单个查询参数
x
设置为
abc;y=pqr则转义的表单是正确的:

?x=abc%3By%3Dpqr%3B
但是,如果您打算使用单独的参数,那么
将是更好的互操作性选择。如果要将
x
指定为
abc
y
指定为
pqr
,则应将其指定为:

?x=abc&y=pqr

正如您所看到的,浏览器的行为是不可预测的,因此请避免使用分号。

IMO正确的行为是在呈现URI供使用之前先对其进行转义。为什么要依赖任何人/任何事情来做你知道应该做的事情?@JeremyMiller-我不想让URI被转义。而安卓(互联网)上的默认浏览器却不能做到这一点。Chrome可以做到这一点,而且可以做到一半。还有一个问题是,浏览器遇到问题中解释的URI时,正确的行为是什么。但是浏览器是否应该逃逸这些参数呢?这方面有什么标准吗?因为在Android上,Chrome做到了,而默认的Internet浏览器却没有。此外,W3C表示“我们建议HTTP服务器实现者,特别是CGI实现者支持使用”;“代替”&“以避免作者以这种方式转义”&“字符的麻烦。”因此,使用“;”的全部目的是避免转义-那么为什么Chrome转义分号。浏览器通常不尊重这一建议。具体来说,在Chrome中。