mirror of
https://github.com/foo-dogsquared/wiki.git
synced 2025-01-30 22:57:59 +00:00
97a24dc723
There are different recipes or at least tidbits that are essentially recipes so we'll just put them under separate namespaces in the hierarchy.
1.8 KiB
1.8 KiB
Code recipes: Percent encoding in Bash
Percent-encoding is commonly used in URLs. Pretty nice especially when used with spaces. Though, this is something that is rarely needed in GNU Bash except if you're writing a quick script.
Based from this implementation.
It was modified to be closer to the output from Python urlencode
.
function urlencode {
local msg=$1
local length="${#1}"
for (( i = 0; i < length; i++ )); do
local ch="${msg:i:1}"
case $ch in
[a-zA-Z0-9.~_-])
printf "%c" $ch;;
,*)
printf '%s' "$ch" | xxd -plain -cols 1 | {
while read hex; do
printf "%%%s" $hex
done
};;
esac
done
printf "\n"
}
urlencode "El Doggo"
urlencode "El Niño"
urlencode "Whoa there, sonny!"
ElDoggo ElNiÃo Whoatheresonny
To decode percent-encoded strings:
function urldecode {
# urldecode <string>
# Replace all pluses with spaces since it usually represents it in URLs.
local url_encoded="${1//+/ }"
# Replace all percent sign with '\x' and print the message with byte interpretation.
printf '%b\n' "${url_encoded//%/\\x}"
}
urldecode "El%20Doggo"
urldecode "%e9%bd%8b%e8%97%a4%e3%83%bbB%e3%83%bb%e6%a5%b5%e3%83%bb%e5%b0%86%e5%97%a3"
El Doggo 齋藤・ B ・極・将嗣