自定义URI方案在"#标签前删除空格" (#)

时间:2015-11-05 13:14:37

标签: windows uri url-scheme

我正在撰写自定义URI方案,请遵循以下文章:

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

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

事情是,在第一次斜线之后,如果我写了#34;#"如果有空格,则删除所有空格。

示例:

myScheme://first/second #third

被解释为:

myScheme://first/second#third

在我的申请表中。

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

myScheme://first #second

被解释为:

myScheme://first /#second

在我的申请表中。

任何人都可以解释这种行为吗?

==编辑==

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

谁知道为什么?

1 个答案:

答案 0 :(得分:0)

通常使用百分比编码的空格,例如。

页面 Registering an Application to a URI Scheme 列出了URI中空格的多个问题:

  

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

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

  

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

最后一部分是建议:

  

避免 URI中的空格,引号或反斜杠

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