Seite 1 von 1

FlexUrlEncoder()

Verfasst: 12.08.2008 16:08
von Little John
Hallo zusammen,

es nervt andere und mich auch, dass die Forumsoftware best. Zeichen in URLs nicht akzeptiert, die normalerweise Bestandteil von Links sein können ... und die daher auch von PBs eingebauter Routine URLEncoder() nicht codiert werden. Als Abhilfe habe ich selbst eine kleine Codierfunktion geschrieben:

Code: Alles auswählen

EnableExplicit

Procedure.s FlexUrlEncoder (url.s)
   Protected charlist.s = "()"  ; Liste *zusätzlich* zu codierender Zeichen
   Protected i.l, char.s

   url = URLEncoder(url)        ; Das meiste wird schonmal von PB erledigt.
   For i = 1 To Len(charList)
      char = Mid(charlist, i, 1)
      url = ReplaceString(url, char, "%" + Hex(Asc(char)))
   Next
   ProcedureReturn url
EndProcedure

;-- Demo
Debug     URLEncoder("http://wiki.delphigl.com/index.php/Bloom(pseudo-HDR)")
Debug FlexUrlEnCoder("http://wiki.delphigl.com/index.php/Bloom(pseudo-HDR)")
Was waren jetzt nochmal die anderen Zeichen außer (), die hier im Forum in Links codiert werden müssen?

Gruß, Little John

Re: FlexUrlEncoder()

Verfasst: 12.08.2008 16:21
von AND51
Little John hat geschrieben:

Code: Alles auswählen

url = ReplaceString(url, char, "%" + Hex(Asc(char)))
Sooo ist es ja nicht ganz korrekt, hm...? :wink:
Sollte wohl besser vorgenullt werden, wenn nötig:

Code: Alles auswählen

url = ReplaceString(url, char, "%" + RSet(Hex(Asc(char))), 2, "0")
Ach ja und ich würde alle Zeichen codieren, die zu der RegExp-Klasse \W gehören.
Also alle nicht-alphanumerischen Zeichen, auch Leerzeichen.

Verfasst: 12.08.2008 16:29
von Little John
Bis Du sicher dass diese Dinge nötig sind?? Der eigene Code muss sich doch nur noch um die Zeichen kümmern, die von der eingebauten Funktion URLEncoder() nicht erfasst werden. Das betrifft jedenfalls nicht Leerzeichen -- und wahrcheinlich auch keine Zeichen < $10.

Schreib 'mal lieber welche anderen Zeichen (die aber allgemein im URLs vorkommen dürfen) außer () die Forumssoftware in Links nicht akzeptiert. :D

//edit
Vielleicht sind's auch nur "(" und ")"? Mir ist jetzt wieder eingefallen, dass ein anderes verdächtiges Zeichen welches ich noch im Hinterkopf hatte "ß" war, aber das wird schon von PBs eingebautem URLEncoder() erfasst.

Gruß, Little John