URLEncoder() kodiert falsch

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

URLEncoder() kodiert falsch

Beitrag 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
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
helpy
Beiträge: 636
Registriert: 29.08.2004 13:29

Re: URLEncoder() kodiert falsch

Beitrag 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
Windows 10
PB Last Final / (Sometimes testing Beta versions)
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: URLEncoder() kodiert falsch

Beitrag 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?
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Derren
Beiträge: 558
Registriert: 23.07.2011 02:08

Re: URLEncoder() kodiert falsch

Beitrag 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.
Signatur und so
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: URLEncoder() kodiert falsch

Beitrag 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.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
rolaf
Beiträge: 3843
Registriert: 10.03.2005 14:01

Re: URLEncoder() kodiert falsch

Beitrag 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.
:::: WIN 10 :: PB 5.73 :: (x64) ::::
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: URLEncoder() kodiert falsch

Beitrag 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. /:->
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
helpy
Beiträge: 636
Registriert: 29.08.2004 13:29

Re: URLEncoder() kodiert falsch

Beitrag 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
Windows 10
PB Last Final / (Sometimes testing Beta versions)
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: URLEncoder() kodiert falsch

Beitrag von RSBasic »

Naja, ich hab inzwischen einfach ReplaceString() gemacht. Aber danke dir trotzdem. ;)
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Justin
Beiträge: 167
Registriert: 09.09.2008 16:46

Re: URLEncoder() kodiert falsch

Beitrag 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
PB 5.11 x64 / Kubuntu 12.10 x64 | Windows 7 x64
Antworten