Url 为什么Network.URI(parseURI)不喜欢管道字符?
我正在使用中的Url 为什么Network.URI(parseURI)不喜欢管道字符?,url,haskell,uri,Url,Haskell,Uri,我正在使用中的parseURI函数来解析一些URL。其中一些URL中有管道字符,解析失败。例如: Network.URI> parseURI "http://something.com/foo|bar" Nothing 然而,这些URL是从真实的网站获得的,并且在web浏览器中正确加载,因此必须有某种正确的方法来处理它们 为什么在带有管道字符的URL上解析失败,我可以做些什么使它们正确解析?在解析之前,您需要使用escapeURIStringisUnescapedInURI将告诉您是否允
parseURI
函数来解析一些URL。其中一些URL中有管道字符,解析失败。例如:
Network.URI> parseURI "http://something.com/foo|bar"
Nothing
然而,这些URL是从真实的网站获得的,并且在web浏览器中正确加载,因此必须有某种正确的方法来处理它们
为什么在带有管道字符的URL上解析失败,我可以做些什么使它们正确解析?在解析之前,您需要使用
escapeURIString
isUnescapedInURI
将告诉您是否允许在URI组件中对该字符进行unescape,如中所述
因此,要正确编码和解析它:
λ> parseURI $ escapeURIString isUnescapedInURI "http://something.com/foo|bar"
Just http://something.com/foo%7Cbar
事实上,这个特殊的角落案例在黑客文档中得到了很好的解释。在解析之前,您需要使用
escapeURIString
isUnescapedInURI
将告诉您是否允许在URI组件中对该字符进行unescape,如中所述
因此,要正确编码和解析它:
λ> parseURI $ escapeURIString isUnescapedInURI "http://something.com/foo|bar"
Just http://something.com/foo%7Cbar
事实上,这个特殊的角落案例在黑客文档中得到了很好的解释。你能对它们进行编码(替换为
%7C
)吗?我能,它能正确解析。但是,对url进行完全url编码会导致“http%3A%2F%2Fsomething.com%2Ffoo%7Cbar”,这也会导致解析失败。那么,我如何选择url编码的字符和不编码的字符呢?我只能猜测,但通常你是从一个基本url(“我猜”)构建这些字符的-为什么你们都编码然后试着解码它们(我猜你可能是在前端JS中编码的)你能编码它们吗(用%7C
)替换它吗?我能,然后它正确地解析了。但是,对url进行完全url编码会导致“http%3A%2F%2Fsomething.com%2Ffoo%7Cbar”,这也会导致解析失败。那么,我该如何选择url编码的字符和不编码的字符呢?我只能猜测,但通常你是从一个基本url(“我猜”)构建这些字符的-为什么你们都编码,然后尝试解码它们(我猜你可能在前端JS中进行编码?)