为什么Network.URI(parseURI)不喜欢管道字符?

时间:2016-04-17 19:17:46

标签: url haskell uri

我正在使用network-uri package中的parseURI函数来解析一些网址。其中一些url有一个管道字符,解析失败。例如:

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

但是,这些网址是从真实网站获取的,并且在网络浏览器中正确加载,因此必须有某种正确的处理方式。

为什么解析在使用管道符号的网址上失败,我该怎么做才能正确解析?

1 个答案:

答案 0 :(得分:3)

在解析之前,您需要使用escapeURIStringisUnescapedInURI将告诉您是否允许将字符转义为documentation中提到的URI组件。

λ> isUnescapedInURI '|'
False

因此,要正确编码和解析它:

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

事实上,这个特定的角落案例在Hackage文档中得到了很好的解释。