ENCODED=$(echo -n "value to encode" | \
perl -pe's/([^-_.~A-Za-z0-9])/sprintf("%%%02X", ord($1))/seg');
echo $ENCODED
This command line percent-encodes strings, even binary data. You can use redirection. I used `echo -n` because I didn’t want a newline (%0A) tagged onto the end. I’ll be using this in a bash script to send HTTP POST data via curl.
My result is based on Perl URL Encode & Decode String, modified to be run on the command line and updated to skip the four non-alphanumeric unreserved characters specified in RFC 3986 Section 2.3.
I don’t know if this depends on Perl multibyte settings or anything else. I might have just been lucky. Perl isn’t my thing.
Troy Volin
/ November 3, 2008Wow. Google for “bash function url encode” and you can’t hope for better results than this!
Thanks!
starenka
/ January 14, 2009you don’t need to do this, curl encodes the data: curl -d “option=arg”
rgm
/ January 27, 2011Recent curl supports this syntax:
curl –data-urlencode “paramName=param&=?/:=Value” http://www.example.com
See the man page, or:
http://curl.basemirror.de/docs/httpscripting.html
Demiurg
/ August 20, 2009perl -MURI::Escape -e ‘print uri_escape(“=+%”) . “\n”‘