Hi,sorry I can't reply directly to this thread http://mail-archives.apache.org/mod_mbox/httpd-dev/200709.mbox/[EMAIL PROTECTED] - i only (re)subscribed to this list today after I found the thread.
+/*
+ * Escapes a uri in a similar way as php's urlencode does.
+ * Based on ap_os_escape_path in server/util.c
+ */
+static char *escape_uri(apr_pool_t *p, const char *path) {
+ char *copy = apr_palloc(p, 3 * strlen(path) + 3);
+ const unsigned char *s = (const unsigned char *)path;
+ unsigned char *d = (unsigned char *)copy;
+ unsigned c;
+
+ while ((c = *s)) {
+ if (apr_isalnum(c) || c == '_') {
+ *d++ = c;
+ }
+ else if (c == ' ') {
+ *d++ = '+';
+ }
+ else {
+ d = c2x(c, '%', d);
+ }
+ ++s;
+ }
+ *d = '\0';
+ return copy;
+}
+
Ruediger Pluem:
It most likely should. I placed it there because I thought the patch would get a higher acceptance if it just touched mod_rewrite.Does it make sense to duplicate code? Shouldn't this be placed in util.c?
+ /* escape the backreference */ + char *tmp2, *tmp; + tmp = apr_palloc(pool, span + 1);+ strncpy(tmp, bri->source + bri->regmatch[n].rm_so, span);
Ruediger Pluem:
How about using apr_pstrndup instead?
Yes, I was not aware of that function. André Malo:
This spreads another uri escaper copy around. Why can't we take ap_escape_uri? Without deep digging: what's the difference? Also I don't like the ' ' => '+' transition, which should not be applied forpaths. It's safer to translate that always to %20, I guess.The main difference is this escaping of ' ' to '+'. The reason for this is that while ' ' gets encoded as %20 in paths, it gets encoded as '+' in query strings (afaik for historic reasons). Therefore, languages which interpret the query string (like PHP) might get confused if they receive a %20 in the query string (or at least that was my concern).
André Malo:
By the way, I'm wondering why nobody picked up the suggested use of the escape rewrite map (or I overread it).I don't know if that works but I developed the patch because it can be used in a directory-context and the RewriteMap can't.
I've created another patch, hopefully you'll like it better. Regards, Guenther
rewrite.diff
Description: Binary data
