Seite 1 von 1

URLEncoder() kodiert falsch

Verfasst: 28.02.2013 23:41
von RSBasic
Hallo,


mir ist aufgefallen, dass URLEncoder() bei bestimmten Zeichen falsch kodiert, wenn ich richtig sehe.
Beispiel 1:

Code: Alles auswählen

URLEncoder("Schützsimulator.rar")
Ausgabe hat geschrieben:Sch%FCtzsimulator.rar
Eigentlich sollte es so heißen:
Ausgabe-URL des Browsers hat geschrieben:Sch%C3%BCtzsimulator.rar
Beispiel 2:

Code: Alles auswählen

URLEncoder("Graf Rüdeger.pb")
Ausgabe hat geschrieben:Graf%20R%FCdeger.pb
Eigentlich sollte es so heißen:
Ausgabe-URL des Browsers hat geschrieben:Graf%20R%C3%BCdeger.pb
Beispiel 3:

Code: Alles auswählen

URLEncoder("Graf Rüdeger.exe")
Ausgabe hat geschrieben:Graf%20R%FCdeger.exe
Eigentlich sollte es so heißen:
Ausgabe-URL des Browsers hat geschrieben:Graf%20R%C3%BCdeger.exe
Wenn ich den von URLEncoder() zurückgegebenen String in der Adressleiste meines Browsers eingebe, kann er die Datei nicht finden, weil es anscheinend falsch kodiert ist.
Kann es jemand bestätigen und ggf. bitte im englischen Forum posten?

__________________________________________________
Thread verschoben
Bugs>Allgemein
01.03.2013
RSBasic

Re: URLEncoder() kodiert falsch

Verfasst: 01.03.2013 00:24
von helpy
URLEncoder() kann keine Unicode-Zeichen verarbeiten.
Es wird anscheinend vor dem URL-Encoding der String nach ASCII konvertiert und dann erst das Encoding durchgeführt.

Siehe auch den Abschnitt Nicht-ASCII-Zeichen des Wikipedia-Artikels URL-Encoding.

Die Web-Anwendung, die Du aufrufst, scheint jedoch UTF-8 zu erwarten. Das wird aber von URLencoder() nicht unterstützt.

lg,
guido

Re: URLEncoder() kodiert falsch

Verfasst: 01.03.2013 10:19
von RSBasic
Danke für deine Erklärung. :)
OKay, dann ist das wohl doch kein Bug. Habs verschoben.
Hast du/Habt ihr eine Idee, wie ich mittels PB so kodieren kann, dass es auch mit dem Aufrufen mit meiner Website klappt?

Re: URLEncoder() kodiert falsch

Verfasst: 01.03.2013 18:29
von Derren
Hm?
Du sollst ja auch nur den Teil enkodieren, der Teil der später von deiner Website ausgelesen werden soll.
Die Domain zu enkodieren macht keinen Sinn.

So wendet man URLEncoder() an.

http://www.adresse.tld/?ordner würde normalerweise eine GET-Variable namens Ordner zur Verfügung stellen.
Das Fragezeichen muss escaped werden, wenn du tatsächlich einen Ordner namens ?ordner auf dem Server hast.

Anderes Beispiel:

www.üüüüü.tld/?name=Günter müsstest du so erstellen: "www.üüüüü.tld/?" + URLEncoder("name=Günter")
Das Ergebnis ist dann: www.üüüüü.tld/?name=G%FCnter
Und diese Adresse kannst du ohne Problem in deinem Browser tippen.

Um's anders auszudrücken. URLEncoder() wird nicht dafür benutzt die komplette URL to encoden, sondern um einen Text mit nicht-URL-verträglichen Zeichen (Leerzeichen, Schrägstrich, "#" etc...) umzuwandeln.

Wenn du z.B. 3 Namen an ein PHP-Script übergeben willst, dann könntest du das so machen.

Code: Alles auswählen

Debug "http://www.üüü.tld/?name1=" + URLEncoder("Günter") + "&name2=" + URLEncoder("Özkan") + "&name3=" + URLEncoder("ÄÖÜ?#&ß") 
Auf PHP-Seite wird GET_['name1'] Günter ausgeben etc...
Ohne URLEncoder() wäre spätestens bei dem Fragezeichen bei name3 Schluss und dein Script wirft einen Fehler oder ignoriert den hinteren Teil einfach (hab's jetzt nicht getestet).



PS: Das Problem ist, dass Domains jetzt auch Umlaute enthalten dürfen. Vorher war es kein Problem, die komplette URL zu encoden, da jegliche Sonderzeichen sowieso nur im hinteren Teil (also nach .tld) auftauchen durften.
Jetzt sind Umlaute erlaubt und die Browser erkennen dies auch. Allerdings erkennen sie nicht die Escapesequenz dieser Umlaute. Also so gesehen ist es schon ein Bug. Aber einer von Firefox (oder was auch immer du benutzt hast, mein Firefox muckt jedenfalls auch rum), nicht von PB.

Re: URLEncoder() kodiert falsch

Verfasst: 01.03.2013 21:09
von RSBasic
Wo habe ich geschrieben, dass ich Domains mitkodiere? Das mache ich doch garnicht, sondern nur den Dateinamen der jeweiligen Datei, die im Browser aufgerufen wird, und das funktioniert nicht, weil ich ein anderes Kodierungsformat brauche, welches meine Website braucht bzw. akzeptiert.

Re: URLEncoder() kodiert falsch

Verfasst: 02.03.2013 08:44
von rolaf
Sind es denn viele Zeichen die codiert werden müßen? Meist ist es doch nur äöüß + Leer- und paar weitere Zeichen. Kannst ja Notfalls kleine Procedure basteln die die Stings passend für dich umwandelt. Geht ja mit PB relativ simpel.

Re: URLEncoder() kodiert falsch

Verfasst: 02.03.2013 13:05
von RSBasic
Ja das muss ich wohl anscheinend manuell kodieren, aber da ich nicht weiß, ob es noch weitere Zeichen gibt, die von der Funktion "URLEncoder()" nicht in das richtige Format ausgespuckt werden, muss ich wohl alle möglichen Zeichen berücksichtigen. :?
Wäre toll, wenn URLEncoder() mehrere Formate unterstützen würde. Ich will doch nur, dass der Benutzer die Dateien richtig downloaden kann, wie z.B.: http://www.rsbasic.de/backupprogramme/S ... ulator.rar
Aber das funktioniert ja nicht, weil es falsch kodiert wurde. Andere Dateien funktionieren, aber z.B. bei "ü" hat er Probleme, weil es "%C3%BC" und nicht "%FC" lauten muss. /:->

Re: URLEncoder() kodiert falsch

Verfasst: 03.03.2013 20:39
von helpy
Hier eine mögliche Lösung von mir:

==> http://purebasic.fr/german/viewtopic.ph ... URLencoder

Das ist nun schon einige Zeit her und ich weiß nicht, ob ich das heute immer noch so machen würde.

lg,
guido

Re: URLEncoder() kodiert falsch

Verfasst: 03.03.2013 21:03
von RSBasic
Naja, ich hab inzwischen einfach ReplaceString() gemacht. Aber danke dir trotzdem. ;)

Re: URLEncoder() kodiert falsch

Verfasst: 07.04.2014 11:06
von Justin
Moin,

muss das Thema leider wieder rauf holen :)
Der URLEncoder encodet auch ASCII leider nicht korrekt:

Code: Alles auswählen

debug "user+23"
Ergebnis ist: user+23

Das "+" muss aber verschlüsselt werden und ist wie gesagt ein ASCII- Zeichen. Daher doch Buggi :)

Gruß
Justin