summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSimonas Kazlauskas <git@kazlauskas.me>2013-06-16 14:57:58 +0300
committerSimonas Kazlauskas <git@kazlauskas.me>2013-06-16 15:11:04 +0300
commit72ed15e174b467c60486ccdeeea65e8f13d60480 (patch)
tree30f2132e232adde04e20c2eef0e44f6283a05296 /src
parentd456f6ebf724fc83b7c23fa9625b0b484acc1f00 (diff)
downloadhakyll-72ed15e174b467c60486ccdeeea65e8f13d60480.tar.gz
Make toUri sanitise all characters needed
Diffstat (limited to 'src')
-rw-r--r--src/Hakyll/Web/Html.hs10
1 files changed, 6 insertions, 4 deletions
diff --git a/src/Hakyll/Web/Html.hs b/src/Hakyll/Web/Html.hs
index d06b7c2..3a0aa3b 100644
--- a/src/Hakyll/Web/Html.hs
+++ b/src/Hakyll/Web/Html.hs
@@ -30,6 +30,7 @@ import System.FilePath (joinPath, splitPath,
import Text.Blaze.Html (toHtml)
import Text.Blaze.Html.Renderer.String (renderHtml)
import qualified Text.HTML.TagSoup as TS
+import Network.URI (isUnreserved, escapeURIString)
--------------------------------------------------------------------------------
@@ -105,10 +106,11 @@ toUrl url = case url of
('/' : xs) -> '/' : sanitize xs
xs -> '/' : sanitize xs
where
- -- This probably needs to be a separate function
- sanitize = concatMap $ \c -> case c of
- ' ' -> "%20"
- _ -> [c]
+ -- Everything but unreserved characters should be escaped as we are
+ -- sanitising the path therefore reserved characters which have a
+ -- meaning in URI does not appear. Special casing for `/`, because it has
+ -- a special meaning in FilePath as well as in URI.
+ sanitize = escapeURIString (\c -> c == '/' || isUnreserved c)
--------------------------------------------------------------------------------