RosettaCodeData/Task/URL-encoding/UNIX-Shell/url-encoding.sh

48 lines
962 B
Bash
Raw Permalink Normal View History

2023-07-01 11:58:00 -04:00
function urlencode
{
2026-04-30 12:34:36 -04:00
typeset decoded=$1 encoded= rest= c=
typeset rest2= bug='rest2=${rest}'
2023-07-01 11:58:00 -04:00
2026-04-30 12:34:36 -04:00
if [[ -z ${BASH_VERSION} ]]; then
# bug /usr/bin/sh HP-UX 11.00
typeset _decoded='xyz%26xyz'
rest="${_decoded#?}"
c="${_decoded%%${rest}}"
if (( ${#c} != 1 )); then
typeset qm='????????????????????????????????????????????????????????????????????????'
typeset bug='(( ${#rest} > 0 )) && typeset -L${#rest} rest2="${qm}" || rest2=${rest}'
fi
fi
2023-07-01 11:58:00 -04:00
2026-04-30 12:34:36 -04:00
rest="${decoded#?}"
eval ${bug}
c="${decoded%%${rest2}}"
decoded="${rest}"
2023-07-01 11:58:00 -04:00
2026-04-30 12:34:36 -04:00
while [[ -n ${c} ]]; do
case ${c} in
[-a-zA-z0-9.])
;;
' ')
c='+'
;;
*)
c=$(printf "%%%02X" "'$c")
;;
esac
2023-07-01 11:58:00 -04:00
2026-04-30 12:34:36 -04:00
encoded="${encoded}${c}"
2023-07-01 11:58:00 -04:00
2026-04-30 12:34:36 -04:00
rest="${decoded#?}"
eval ${bug}
c="${decoded%%${rest2}}"
decoded="${rest}"
done
2023-07-01 11:58:00 -04:00
2026-04-30 12:34:36 -04:00
if [[ -n ${BASH_VERSION:-} ]]; then
\echo -E "${encoded}"
else
print -r -- "${encoded}"
fi
2023-07-01 11:58:00 -04:00
}