#!/usr/bin/env bash

# yeah, i totally stole this from stack exchange, no shame
# - rwxrob

# and I stole it from rwxrob
# - inkletblot

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
}

if test -n "$1"; then
  rawurlencode "$*"
  exit
fi

IFS=
while read -r line; do
  rawurlencode "$line"
done
