summaryrefslogtreecommitdiff
path: root/rc/bin
diff options
context:
space:
mode:
authorstanley lieber <stanley.lieber@gmail.com>2012-10-04 14:08:32 -0500
committerstanley lieber <stanley.lieber@gmail.com>2012-10-04 14:08:32 -0500
commit0c93da13aeda2337f1e7a81f8793bca52887c741 (patch)
treec53495225e385a294685dea3cabd4573f640f682 /rc/bin
parent56df14a6a319b1617d004b46f36710e2c27fe380 (diff)
add /rc/bin/urlencode
Diffstat (limited to 'rc/bin')
-rwxr-xr-xrc/bin/urlencode36
1 files changed, 36 insertions, 0 deletions
diff --git a/rc/bin/urlencode b/rc/bin/urlencode
new file mode 100755
index 000000000..a23359328
--- /dev/null
+++ b/rc/bin/urlencode
@@ -0,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 ""
+}