2015-11-05 63 views
0

我正在寫的自定義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等...不能處理這些情況。

有人知道爲什麼嗎?

回答

0

通常使用百分比編碼的空格,例如。

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