自定义 URI 方案删除"hashtag sign" (#) 之前的空格



我正在编写自定义URI方案,下面是本文:

https://msdn.microsoft.com/en-us/library/aa767914(v=vs.85).aspx

我的处理程序如下所示:myScheme://firstItem/SecondItem

问题是,在第一个斜杠之后,如果我用空格写"#",所有空格都会被删除。

示例:

myScheme://first/second #third

解释为:

myScheme://first/second#third

在我的申请中。

此外,如果它是斜杠之前的第一个参数,则会添加一个斜杠:

myScheme://first #second

解释为:

myScheme://first /#second

在我的申请中。

有人能解释这种行为吗?

===编辑===

mailto:协议是唯一一个以类似方式实现的协议,并且运行良好。onenote、winamp等…无法处理这些情况。

有人知道为什么吗?

通常使用百分比编码空间,例如.

  • 在URL中,空格应该使用%20或+进行编码吗
  • URL编码空格字符:+或%20

将应用程序注册到URI方案页面列出了多个URI中的空格问题:

通过将上述设置添加到注册表,导航到URI(如alert:Hello%20World)将导致尝试在命令行上使用完整的URI启动alert.exe。Internet Explorer百分比解码URI,但Windows运行。。。命令没有。如果URI包含百分比编码空间,则可能会在命令行上将其拆分为多个参数。

"拆分"对应于问题的第二部分。但后来,它评论

当ShellExecute在命令行中使用字符串执行可插入协议处理程序时,URI中的任何未编码空格、引号和反斜杠都将被解释为命令行的一部分。这意味着,如果使用C/C++的argc和argv来确定传递给应用程序的参数,那么字符串可能会在多个参数之间中断。为了缓解这个问题:

最后一部分是建议:

在URI 中避免 空格、引号或反斜杠

因为系统的一部分将依赖于百分比编码,而另一部分则被它破坏。

最新更新