自定义URI方案 “主题标签标志” 之前删除空格(#)

问题描述:

我正在写的自定义URI方案,本文以下内容:自定义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等...不能处理这些情况。

有人知道为什么吗?

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

Registering an Application to a URI Scheme列出了不止一个问题空间的URI:

通过将上述设置,注册表,定位到诸如alert:Hello%20World之类的URI将导致尝试启动alert.exe在命令行上使用完整的URI。 Internet Explorer百分比 - 解码URI,但Windows运行...命令不。如果一个URI包含百分比编码的空格,它可能会在命令行中跨多个参数拆分。

“split”对应于问题的第二部分。但是后来,它评论

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

最后一部分是推荐:

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

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

+0

我不介意如果字符串将被分成几个参数,我不能告诉最终用户编码特殊字符。 我看到mailto:没有这个问题,也没有定制开发的协议处理程序。 是不是有什么办法可以让我的应用程序只收到我发送的内容? – ArielB

+0

显然不是:应用程序获取您发送内容的过滤/转换版本。 –

+0

所以我不知道mailto如何克服这个问题..因为它似乎他们没有这个问题(发件人收到确切的字符串发送) – ArielB