Der Vollständigkeit halber: viele Lösungen mit sed
o awk
übersetzen nur einen speziellen Satz von Zeichen und sind daher von der Codegröße her recht groß und übersetzen auch nicht andere Sonderzeichen, die kodiert werden sollten.
Eine sichere Art der Urlencodierung wäre es, einfach jedes einzelne Byte zu codieren - auch die, die erlaubt wären.
echo -ne 'some random\nbytes' | xxd -plain | tr -d '\n' | sed 's/\(..\)/%\1/g'
xxd sorgt hier dafür, dass die Eingabe als Bytes und nicht als Zeichen behandelt wird.
éditer :
xxd kommt mit dem vim-common-Paket in Debian und ich war gerade auf einem System, wo es nicht installiert war und ich wollte es nicht installieren. Die Alternative ist die Verwendung von hexdump
aus dem bsdmainutils-Paket in Debian. Nach dem folgenden Diagramm sollten bsdmainutils und vim-common eine ungefähr gleiche Wahrscheinlichkeit haben, installiert zu werden:
http://qa.debian.org/popcon-png.php?packages=vim-common%2Cbsdmainutils&show_installed=1&want_legend=1&want_ticks=1
aber dennoch hier eine Version, die hexdump
anstelle von xxd
und ermöglicht die Vermeidung der tr
anrufen:
echo -ne 'some random\nbytes' | hexdump -v -e '/1 "%02x"' | sed 's/\(..\)/%\1/g'