url_encode() { local text="$1" local pos char while [ ${pos:-0} -lt ${#text} ]; do { pos=$(( $pos + 1 )) char="$( echo "$text" | cut -b $pos )" case "$char" in "_"|"."|"~"|"-") echo -n "$char" ;; [A-Za-z0-9]) echo -n "$char" ;; " ") echo -n "+" ;; *) echo -n "%$( echo "$char" | hexdump -C | cut -d' ' -f3 | head -n1 )" ;; esac } done }