commit 083b8400fd696a16aa8d88020872297a501b4c65
parent 408f83b42d6dd8afde3112b9343d2d43b49a2357
Author: uriel@soma <unknown>
Date: Mon, 20 Jul 2009 03:59:49 +0000
Add url_encode function to cgilib.rc
Diffstat:
1 file changed, 40 insertions(+), 0 deletions(-)
diff --git a/bin/cgilib.rc b/bin/cgilib.rc
@@ -107,6 +107,46 @@ BEGIN {
'
}
+fn url_encode {
+ awk '
+ BEGIN {
+ # We assume an awk implementation that is just plain dumb.
+ # We will convert an character to its ASCII value with the
+ # table ord[], and produce two-digit hexadecimal output
+ # without the printf("%02X") feature.
+
+ EOL = "%0A" # "end of line" string (encoded)
+ split ("1 2 3 4 5 6 7 8 9 A B C D E F", hextab, " ")
+ hextab [0] = 0
+ for ( i=1; i<=255; ++i ) ord [ sprintf ("%c", i) "" ] = i + 0
+ if ("'^$"EncodeEOL^'" == "yes") EncodeEOL = 1; else EncodeEOL = 0
+ }
+ {
+ encoded = ""
+ for ( i=1; i<=length ($0); ++i ) {
+ c = substr ($0, i, 1)
+ if ( c ~ /[a-zA-Z0-9.-]/ ) {
+ encoded = encoded c # safe character
+ } else if ( c == " " ) {
+ encoded = encoded "+" # special handling
+ } else {
+ # unsafe character, encode it as a two-digit hex-number
+ lo = ord [c] % 16
+ hi = int (ord [c] / 16);
+ encoded = encoded "%" hextab [hi] hextab [lo]
+ }
+ }
+ if ( EncodeEOL ) {
+ printf ("%s", encoded EOL)
+ } else {
+ print encoded
+ }
+ }
+ END {
+ #if ( EncodeEOL ) print ""
+ }
+' $*
+}
# Cookies
fn set_cookie {