URL encoding a string in bash script

bash, command-line, linux, urlencode, wget

Solution

You want `$MESSAGE` to be in double-quotes, so the shell won't split it into separate words, then pass it to PHP as an argument:

ENCODEDMESSAGE="$(php -r 'echo rawurlencode($argv[1]);' -- "$MESSAGE")"

Problem

I am writing a bash script in where I am trying to submit a post variable, however wget is treating it as multiple URLS I believe because it is not URLENCODED... here is my basic thought ``` MESSAGE='I am trying to post this information' wget -O test.txt http://xxxxxxxxx.com/alert.php --post-data 'key=xxxx&message='$MESSAGE'' ``` I am getting errors and the alert.php is not getting the post variable plus it pretty mush is saying can't resolve I can't resolve am can't resolve trying .. and so on. My example above is a simple kinda sudo example but I believe if I can url encode it, it would pass, I even tried php like: ``` MESSAGE='I am trying to post this information' MESSAGE=$(php -r 'echo urlencode("'$MESSAGE'");') ``` but php errors out.. any ideas? How can i pass the variable in $MESSAGE without php executing it?

Original source

Related problems