Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Url 为什么Network.URI(parseURI)不喜欢管道字符?_Url_Haskell_Uri - Fatal编程技术网

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中进行编码?)