ref: 5e781b5c85b6b6a0075ebe52bf6a25485693f48b
parent: 3ac258aeee3726cb681c741923214f7676ae9450
author: stanley lieber <stanley.lieber@gmail.com>
date: Thu Oct 4 10:08:32 EDT 2012
add /rc/bin/urlencode
--- /dev/null
+++ b/rc/bin/urlencode
@@ -1,0 +1,36 @@
+#!/bin/awk -f
+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+}
+{+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 ""
+}
--
⑨