Halihallo Andreas
Ich weiss zwar nicht, wie du auf 100% kommst, aber mir ist klar, dass du mit base64 weniger Arbeit hast ;)
vielleicht nicht 100, aber mindestens 95% der Zeichen des Binärstrings müssen url-kodiert werden, bei base64 nur gut 3%!
Nein! - Bei Base64 sind es _immer_ 25% da kommt's gar nicht auf den Inhalt an...
[...]
Hm... Dem Gefühl nach letzteres, aber diese Angabe ist wie immer ohne Gewähr :-)
Ne, wenn ich das Programmieren müsste, würde ich beim letzteren eine For-Schleife machen, wo ich einfach alle nicht url-konformen Zeichen durch den entsprechenden Eintrag aus der "Codierungs-Tabelle" ersetze und in den output-stream kopiere. Ersteres wird wohl die RegExp-Engine anwerfen und ich glaube nicht, dass diese so performant wäre, wie eine For-Schlaufe. Aber eben: Ich weiss a) nicht, wie urlencode intern programmiert ist und b) gleiches gilt für die regExp-Engine.
Sicherheit kriegst du wohl erst über einen Benchmark.
Ja, werde das mal testen. Muß denn die RegExp-Engine für jede RegExp in einem Script extra gestartet werden, oder wird die nur einmal gestartet?
Nun, der Parser muss bei dynamisch generierten RegExp wohl immer wieder angeworfen werden, es gibt jedoch auch die "kompilierten" RegExp, die nur einmal geparsed werden.
Mein Gedanke war nur, das urlencode auf zig Zeichen aufpassen muß, und der eigene reguläre Ausdruck nur auf 2. Ich könnte mir auch abenteuerlieche Konstrukte ohen regulären Ausdruck vorstellen, nur meine ich immer, das die in PHP implementierten Funktionen vielleicht in C geschreiben sind und erheblich schneller arbeiten können?! Aber so wirklich weiß ich das alles auch nicht, daher ja auch die Frage, würde mich wirklich mal interessieren wie das im Allgemeinen aussieht, was man wann am besten verwendet!
Nun, ja, ich nehm stark an, dass urlencode in C geschrieben wurde und mit einer ganz einfachen for-Schlaufe realisiert ist. Da muss kein RegExp geparsed werden. Egal, aufwieviele Zeichen er achten muss, die Zeit, die beim Parsen eingespart wird, macht das wohl wieder wett. Aber eben: Sicher bin ich mir nicht und vielleicht ist es sogar so, dass beide einmal schneller sind (eg. könnte es auf die Stringlänge ankommen).
Viele Grüsse
Philipp