web-routes-0.27.7: Library for maintaining correctness and composability of URLs within an application.

Copyright(c) 2010 Jeremy Shaw
LicenseBSD-style (see the file LICENSE)
Maintainerpartners@seereason.com
Stabilityexperimental
Portabilityportable
Safe HaskellNone
LanguageHaskell98

Web.Routes.Base

Description

Conversions between raw pathinfos and decoded path segments.

Synopsis

Documentation

encodePathInfo :: [Text] -> [(Text, Maybe Text)] -> Text Source

Encodes a list of path segments into a valid URL fragment.

This function takes the following three steps:

  • UTF-8 encodes the characters.
  • Performs percent encoding on all unreserved characters, as well as :@=+$,
  • Intercalates with a slash.

For example:

encodePathInfo [\"foo\", \"bar\", \"baz\"]

"foo/bar/baz"

encodePathInfo [\"foo bar\", \"baz\/bin\"]

"foo%20bar/baz%2Fbin"

encodePathInfo [\"שלום\"]

"%D7%A9%D7%9C%D7%95%D7%9D"

decodePathInfo :: ByteString -> [Text] Source

Performs the inverse operation of encodePathInfo.

In particular, this function:

  • Splits a string at each occurence of a forward slash.
  • Percent-decodes the individual pieces.
  • UTF-8 decodes the resulting data.

This utilizes decodeString from the utf8-string library, and thus all UTF-8 decoding errors are handled as per that library.

In general, you will want to strip the leading slash from a pathinfo before passing it to this function. For example:

decodePathInfo \"\"

[]

decodePathInfo \"\/\"
""

Note that while function accepts a Text value, it is expected that Text will only contain the subset of characters which are allowed to appear in a URL.