#!/bin/bash urlencode() { # Usage: urlencode string local l="${#1}" for (( i = 0 ; i < l ; i++ )); do offsetByte=${1:i:1} case "$offsetByte" in [a-zA-Z0-9.~_-]) printf "$offsetByte" ;; ' ') printf + ;; *) printf '%%%X' "'$offsetByte" esac done } urldecode() { # Usage: urldecode string data=${1//+/ } printf '%b' "${data//\%/\x}" }