URL encoding a string in bash script

删除回忆录丶 提交于 2019-11-27 18:16:24

问题


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?


回答1:


You want $MESSAGE to be in double-quotes, so the shell won't split it into separate words:

ENCODEDMESSAGE=$(php -r "echo urlencode(\"$MESSAGE\");")



回答2:


On CentOS, no extra package needed:

python -c "import urllib;print urllib.quote(raw_input())" <<< "$message"



回答3:


Extending Rockallite's very helpful answer for Python 3 and multiline input from a file (this time on Ubuntu, but that shouldn't matter):

cat any.txt | python3 -c "import urllib.parse, sys; print(urllib.parse.quote(sys.stdin.read()))"

This will result in all lines from the file concatenated into a single URL, the newlines being replaced by %0A.




回答4:


Pure Bash way:

URL='rom%C3%A2ntico'
echo -e "${URL//%/\\x}"

echoes:

romântico

'C3 A2' is 'â' in utf8 hex

utf8 list: http://www.utf8-chartable.de/



来源:https://stackoverflow.com/questions/11876353/url-encoding-a-string-in-bash-script

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!