]> gitweb.factorcode.org Git - factor.git/commitdiff
Adding url-encode-full to urls.encoding to do url encoding properly
authorAlex Chapman <chapman.alex@gmail.com>
Sat, 1 Nov 2008 09:40:07 +0000 (20:40 +1100)
committerAlex Chapman <chapman.alex@gmail.com>
Sat, 1 Nov 2008 09:40:07 +0000 (20:40 +1100)
basis/urls/encoding/encoding-docs.factor
basis/urls/encoding/encoding.factor

index f8b435441f7ecc749f5179e0204ce65d6694c356..82ab3d1f699ed6468bbf2d35d1bf285485cbd117 100644 (file)
@@ -7,7 +7,11 @@ HELP: url-decode
 
 HELP: url-encode
 { $values { "str" string } { "encoded" string } }
-{ $description "URL-encodes a string." } ;
+{ $description "URL-encodes a string, excluding certain characters, such as \"/\"." } ;
+
+HELP: url-encode-full
+{ $values { "str" string } { "encoded" string } }
+{ $description "URL-encodes a string, including all reserved characters, such as \"/\"." } ;
 
 HELP: url-quotable?
 { $values { "ch" "a character" } { "?" "a boolean" } }
index fa882609a5c103724b07b8b7ef4dda84ff96fb31..ce5bd044ac1e5183323b6a0c98053cbe10ffd792 100644 (file)
@@ -14,6 +14,25 @@ IN: urls.encoding
         [ "/_-.:" member? ]
     } 1|| ; foldable
 
+! see http://tools.ietf.org/html/rfc3986#section-2.2
+: gen-delim? ( ch -- ? )
+    ":/?#[]@" member? ; foldable
+
+: sub-delim? ( ch -- ? )
+    "!$&'()*+,;=" member? ; foldable
+
+: reserved? ( ch -- ? )
+    [ gen-delim? ] [ sub-delim? ] bi or ; foldable
+
+! see http://tools.ietf.org/html/rfc3986#section-2.3
+: unreserved? ( ch -- ? )
+    {
+        [ letter? ]
+        [ LETTER? ]
+        [ digit? ]
+        [ "-._~" member? ]
+    } 1|| ; foldable
+
 <PRIVATE
 
 : push-utf8 ( ch -- )
@@ -27,6 +46,11 @@ PRIVATE>
         [ dup url-quotable? [ , ] [ push-utf8 ] if ] each
     ] "" make ;
 
+: url-encode-full ( str -- encoded )
+    [
+        [ dup unreserved? [ , ] [ push-utf8 ] if ] each
+    ] "" make ;
+
 <PRIVATE
 
 : url-decode-hex ( index str -- )