Cyrus Kriticos wrote:
> On 03/08/2013 02:12 AM, Andreas Kohlbach wrote:
>> Ich habe das, was der Browser anhand eines (Flash) Formulars normal an
>> den Server senden würde abgefangen, und in einer Datei gespeichert. Ich
>> würde daraus gerne wieder das ursprüngliche Formular bauen, aber diesmal
>> in HTML statt Flash. [1]
>>
>> Die Datei hat einen Head, der hier nicht interessieren soll, und ein
>> Haufen von "Items" im Body. Das sieht gekürzt etwa so aus.
>>
>> ...
>> email=what%
2540ever.com&birthdate_month=26&birthdate_day=1
>> ...
>>
>> Da kommt sehe sehr viel, dass ich das nicht manuell machen kann.
>>
>> Aussehen soll es danach etwa wie
>>
>> ...
>> <input type="text" name="email">
>> <input type="hidden" name="birthdate_month" value="12">
>> <input type="hidden" name="birthdate_day" value="1">
>> ...
>>
>> Die '"'' dürfen auch gerne wegfallen. Leider stehen auch noch Dinge wie
>> "%20" und anderes mit "%" im Source, was auch umgewandelt werden müsste.
>>
>> Es kann den "type" immer gleich ("text" oder "hidden") setzen, dass ich
>> das dann manuell richten würde. Wichtig ist mir "name" und ggf. "value".
>
> Eine Lösung mit sed und xargs:
Das ist keine Lösung, sondern ineffizienter, nicht portabler Mist. Aber
wenn man nur einen Hammer (sed -e 's/…') hat, sieht eben jedes Problem wie
ein Nagel (Ersetzungsproblem) aus.
> sed -e's/%\([0-9A-F][0-9A-F]\)/\\\\\x\1/g' < DATEINAME |
^^^^^^ ^^^^^^ ^^^^^^^^
man locales, sed, RFC 3986. Was soll das?
> xargs echo -e |
^^
Nicht portabel.
> sed 'y/&/\n/' | sed 's/^\(.*\)=\(.*\)$/<input type="text" name="\1"
> value="\2">/'
$ printf '%s' 'email=what%
2540ever.com&birthdate_month=26&birthdate_day=1' |
awk -v RS='&' '{
split($0, fields, "=");
printf "<input type=\"hidden\" name=\"%s\" value=\"%s\">\n", fields[1],
fields[2];
}'
<input type="hidden" name="email" value="what%
2540ever.com">
<input type="hidden" name="birthdate_month" value="26">
<input type="hidden" name="birthdate_day" value="1">
Wie die URI-Decodierung gehen könnte, habe ich schon erwähnt. Entscheidend
ist hier aber, dass es sich bei “%AB%XY” um *UTF-8-Codeeinheiten* für ein
oder mehr Unicode-Zeichen handelt, und nicht bloss um Codepunktwerte. Daher
müssen Surrogate Pairs berücksichtigt werden, oder es kommt Müll raus.
X-Post & F'up2 de.comp.unix.shell