自定义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空格,引号,或反斜杠
,因为该系统的一个组成部分将依赖百分比编码,而另一个则被它破坏。
我不介意如果字符串将被分成几个参数,我不能告诉最终用户编码特殊字符。 我看到mailto:没有这个问题,也没有定制开发的协议处理程序。 是不是有什么办法可以让我的应用程序只收到我发送的内容? – ArielB
显然不是:应用程序获取您发送内容的过滤/转换版本。 –
所以我不知道mailto如何克服这个问题..因为它似乎他们没有这个问题(发件人收到确切的字符串发送) – ArielB