我正在使用network-uri package中的parseURI
函数来解析一些网址。其中一些url有一个管道字符,解析失败。例如:
Network.URI> parseURI "http://something.com/foo|bar"
Nothing
但是,这些网址是从真实网站获取的,并且在网络浏览器中正确加载,因此必须有某种正确的处理方式。
为什么解析在使用管道符号的网址上失败,我该怎么做才能正确解析?
答案 0 :(得分:3)
在解析之前,您需要使用escapeURIString
。 isUnescapedInURI
将告诉您是否允许将字符转义为documentation中提到的URI组件。
λ> isUnescapedInURI '|'
False
因此,要正确编码和解析它:
λ> parseURI $ escapeURIString isUnescapedInURI "http://something.com/foo|bar"
Just http://something.com/foo%7Cbar
事实上,这个特定的角落案例在Hackage文档中得到了很好的解释。