URI-Encoding

20/12/2008 - 21:34 von Christian Garbs | Report spam
Mahlzeit!

Zum Enkodieren von URIs steht folgendes in der Perl-FAQ:

$ perl -pe "s/([^\\w()'*~\!.-])/sprintf '%%%02x', ord \$1/eg"

Gibt's sowas auch in sed oder gar bash?

Bei beiden stehe ich momentan primàr vor dem Problem, dass ich nicht
weiß, wie ich ein Zeichen in die entsprechende Zahl (A -> 65)
umwandele (das ord() da oben im Perl-Code).

Gruß
Christian

PS: Perl ist eine zusàtzliche Abhàngigkeit und ich möchte nicht für
jede Umwandlung einen Perl-Interpreter starten. Mir schwebt jetzt
gerade vor, nur einen Perl-Prozess zu starten, dem entsprechende
Filehandles zuzuweisen und ihn wàhrend der gesamten Laufzeit
meines Skriptes mehrfach zu benutzen. Ich mache mir Angst.
Christian.Garbs.http://www.cgarbs.de
"Das ewig Unbegreifliche an der Welt ist ihre Begreiflichkeit."
(Albert Einstein)
 

Lesen sie die antworten

#1 Sascha Hüdepohl
20/12/2008 - 23:49 | Warnen spam
Christian Garbs schrieb:

Zum Enkodieren von URIs steht folgendes in der Perl-FAQ:

$ perl -pe "s/([^\\w()'*~\!.-])/sprintf '%%%02x', ord \$1/eg"

Gibt's sowas auch in sed oder gar bash?

Bei beiden stehe ich momentan primàr vor dem Problem, dass ich nicht
weiß, wie ich ein Zeichen in die entsprechende Zahl (A -> 65)
umwandele (das ord() da oben im Perl-Code).



Erster Versuch:

a="URI"

printf $(echo $a | sed -e "s/[()'*~.-]/%%%02x/g") \
$(echo $a | sed -e "s/[^()'*~.-]//g" \
| sed -e "s/\([()'*~.-]\)/'\1 /g"); echo

Das ord() entspricht:
printf "%d" "'A"

Die bash kennt zwar auch eine 'Parameter Expansion' mit Regulàrem
Ausdruck (was den sed Aufruf ersetzen könnte), kann dort soweit ich weiß
aber keine Backreferences.

Vielleicht solltest Du einfach alles in Perl erledigen.

HTH
Sascha

Ähnliche fragen