使用 Elm 解析片段内的查询字符串
Parsing query string inside fragment with Elm
对于 reasons 我需要解析一些看起来被格式化为查询字符串的东西(即 key=value&another_key=another_value
),但它位于 URL 的片段中,例如:
http://example.com/callback#id_token=my_long_jwt&state=some_state
如果 #
是 ?
,那么使用 <?>
会很容易,但我不知道如何(或是否)可以使用 [=15] =] 当它在片段中时。
我可以得到片段 String
:
import Url.Parser as Parser
import Url.Parser exposing ((</>))
type Route = Callback String | NotFound
route : Parser.Parser (Route -> a) a
route = Parser.map Callback (Parser.s "callback" </> fragmentWithDefault )
fragmentWithDefault : Parser.Parser (String -> a) a
fragmentWithDefault = Parser.fragment <| Maybe.withDefault "no_fragment"
toRoute : Url.Url -> Route
toRoute url = Maybe.withDefault NotFound (Url.Parser.parse route url)
但是 Url.Parser.Query
中没有 API,运行 是 Url.Parser.Query.Parser
,我可以 运行 String
[=] 20=].
Url 解析器仅将 Url 片段视为 String
,但您可以在解析前将 #
替换为 ?
:
Maybe.withDefault url <| Url.fromString <| String.replace '#' '?' <| Url.toString url
然后你会在查询部分得到你的片段,这样你就可以正常解析它了。
对于 reasons 我需要解析一些看起来被格式化为查询字符串的东西(即 key=value&another_key=another_value
),但它位于 URL 的片段中,例如:
http://example.com/callback#id_token=my_long_jwt&state=some_state
如果 #
是 ?
,那么使用 <?>
会很容易,但我不知道如何(或是否)可以使用 [=15] =] 当它在片段中时。
我可以得到片段 String
:
import Url.Parser as Parser
import Url.Parser exposing ((</>))
type Route = Callback String | NotFound
route : Parser.Parser (Route -> a) a
route = Parser.map Callback (Parser.s "callback" </> fragmentWithDefault )
fragmentWithDefault : Parser.Parser (String -> a) a
fragmentWithDefault = Parser.fragment <| Maybe.withDefault "no_fragment"
toRoute : Url.Url -> Route
toRoute url = Maybe.withDefault NotFound (Url.Parser.parse route url)
但是 Url.Parser.Query
中没有 API,运行 是 Url.Parser.Query.Parser
,我可以 运行 String
[=] 20=].
Url 解析器仅将 Url 片段视为 String
,但您可以在解析前将 #
替换为 ?
:
Maybe.withDefault url <| Url.fromString <| String.replace '#' '?' <| Url.toString url
然后你会在查询部分得到你的片段,这样你就可以正常解析它了。