Anmelden

View Full Version : Wie kann man eine url encoden/decoden?



dschroeder
01-10-14, 09:00
Guten Morgen.

Ich habe mit Schrecken festgestellt, dass meine selbstgebaute Routine zum encoden und decoden einer url nicht korrekt arbeitet. Ich möchte auf der iSeries eine url parsen oder erzeugen. Dazu gibt es ja Umsetzungen. Z.B. wird ein Space in %20 umgesetzt. Ich habe versucht, eine Umsetzung anhand einer runtergeladenen Tabelle zu implementieren. Die meisten Umsetzungen gehen auch. Aber sobald ich z.B. ein "ö" im Parameterteil der url habe, klappt die Umsetzung nicht. Laut Internet wird ein ö in %C3%B6 (also in 2 Zeichen umgesetzt). Das beinhaltet meine Tabelle nicht.
Hat jemand das Problem bereits mit RPG gelöst? (Java kommt nicht in Frage). Ich habe leider keine API gefunden.

Dieter

BenderD
01-10-14, 09:29
... ich verstehe zwar nicht, warum Java nicht in Frage kommt...
wie wärs denn mit:
SQL Function URLENCODE, oder CGIDEV2 oder HTTPAPI - wobei ich bei keiner dieser Varianten die Hand ins Feuer legen würde ... - fürr mich käme da nur Java in Frage und die Einbindung in RPG sollte da kein Problem sein, wenn man das nicht gerade mit dem JNI Support des Compilers macht.

D*B

dschroeder
01-10-14, 09:50
Vielen Dank. An eine SQL Funktion hatte ich schon gedacht, habe aber keine im Handbuch gefunden (wir sind auf V7.1). Die Funktion URLENCODE wird bei mir leider nicht gefunden.

HALT: Ein Kollege hat die Funktion gerade gefunden in der Lib SYSTOOLS. Super Tipp. Wir versuchen mal, ob das gewünschte rüberkommt.

Vielen Dank.
Dieter

BenderD
01-10-14, 09:56
... die kam erst mit einem PTF (und da gibt es wohl schon mehrere Varianten von...) Das Problem an der Sache ist allerdings, das verschiedene Bestandteile verschieden kodiert werden müssen; von daher würde ich schon zu der Java Einbindung raten.

D*B

PS: und selbst mit Java muss man da aufpassen: die Class URLEncoder kann das auch nicht richtig; man muss da erst eine URI erstellen und dann in einen String umwandeln.

dschroeder
01-10-14, 10:19
Nochmals danke. SQL wäre für uns mit Sicherheit das einfachste. Wir probieres es mal. Ich wusste bisher gar nicht, dass es eine Lib SYSTOOLS gibt.

Dieter

dschroeder
01-10-14, 10:52
Funktioniert einwandfrei:
exec sql set :newUrl = SYSTOOLS.URLDECODE(:url,'UTF-8');
:)
Dieter