如何用把字符串urlencode
如何在在URL中传递这些特殊符号? 比如在shell里面调用一个短信网关的api,遇到特殊字符可能就会丢数。
特殊字符的URL的编码的格式为:
%加对应字符的ASCII(16进制)码值。
例如:空格的编码值是”%20” 。
编码如下:
符号 | 说明 | 值 |
---|---|---|
+ | URL中+号表示空格 | %2B |
空格 | URL中的空格可以用+号或者编码 | %20 |
/ | 分隔目录和子目录 | %2F |
? | 分隔实际的 URL 和参数 | %3F |
% | 指定特殊字符 | %25 |
# | 表示书签 | %23 |
& | URL中指定的参数间的分隔符 | %26 |
= | URL中指定参数的值 | %3D |
简单粗暴方法
直接替换
echo "中文10%2234aa%% ,123我是中%文" | sed 's/\%/\%25/g' | sed 's/ /\%20/g'
rawshell url encode
rawurlencode() {
local string="${1}"
local strlen=${#string}
local encoded=""
local pos c o
for (( pos=0 ; pos<strlen ; pos++ )); do
c=${string:$pos:1}
case "$c" in
[-_.~a-zA-Z0-9] ) o="${c}" ;;
* ) printf -v o '%%%02x' "'$c"
esac
encoded+="${o}"
done
echo "${encoded}" # You can either set a return variable (FASTER)
REPLY="${encoded}" #+or echo the result (EASIER)... or both... :p
}
a=`rawurlencode "sdfsdf%sss"`
curl
curl \
--data-urlencode "paramName=value" \
--data-urlencode "secondParam=value" \
http://example.com
python
urllib.quote_plus('a%a')
echo "import urllib ; print urllib.quote('aasdfs% sdf ')" | python