2016-04-17 16 views
0

我使用network-uri packageparseURI函數來解析一些URL。其中一些URL具有管道字符並且解析失敗。例如:爲什麼Network.URI(parseURI)不喜歡管道字符?

Network.URI> parseURI "http://something.com/foo|bar" 
Nothing 

然而,這些URL是從真正的網站獲得他們正確加載在Web瀏覽器,所以必須有某種與他們打交道的正確方法。

爲什麼使用豎線字符在URL上解析失敗,我該怎麼做才能使它們正確解析?

+0

你可以編碼它們(用'%7C'代替它)嗎? – Carsten

+0

我可以,然後正確解析。但是,對網址進行完全的url編碼會導致''http%3A%2F%2Fsomething.com%2Ffoo%7Cbar'',這也不能解析。那麼我該如何選擇哪些字符進行網址編碼,哪些不是? –

+0

以及我只能猜測,但通常你建立從基地址(「http://something.com/」我猜) - 爲什麼你都編碼,然後嘗試解碼它們(我想你做的編碼在你的前端可能是JS?) – Carsten

回答

2

解析前需要使用escapeURIStringisUnescapedInURI會告訴你該字符是否允許在UI組件中轉義,如documentation中所述。

λ> isUnescapedInURI '|' 
False 

所以,正確編碼,並對其進行分析:

λ> parseURI $ escapeURIString isUnescapedInURI "http://something.com/foo|bar" 
Just http://something.com/foo%7Cbar 

其實這種特定的極端情況下,在Hackage文檔很好的解釋。