# Created on savesnippets.com ยท https://savesnippets.com/3GE2XCwdcvJygO urlencode() { local s="$1" out="" local i c for (( i = 0; i < ${#s}; i++ )); do c="${s:i:1}" case "$c" in [a-zA-Z0-9._~-]) out+="$c" ;; *) printf -v hex '%%%02X' "'$c" out+="$hex" ;; esac done printf '%s' "$out" } urldecode() { local s="${1//+/ }" printf '%b' "${s//%/\\x}" } urlencode "hello world & friends" # hello%20world%20%26%20friends urldecode "hello%20world%20%26%20friends" # hello world & friends