如何用把字符串urlencode

如何用把字符串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