From 0c93da13aeda2337f1e7a81f8793bca52887c741 Mon Sep 17 00:00:00 2001 From: stanley lieber Date: Thu, 4 Oct 2012 14:08:32 -0500 Subject: add /rc/bin/urlencode --- rc/bin/urlencode | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100755 rc/bin/urlencode (limited to 'rc/bin') 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 "" +} -- cgit v1.2.3