/* querystring.c Break up a QUERY_STRING variable. Output is in SETENV format, ready to be eval'd Source: Steve Shipway. accessed 2011/5/17. */ #include #include parse( char *s /* we can't use strtok since we are already using it at the higher level */ { char *vname; char *val; int c; char buf[3]; if (!s) { printf("X_ERR='Null phrase'\n"); return; } vname = s; while (*s && (*s != '=')) s++; if (!*s) { printf("X_ERR='Null assignment'\n"); return; } *(s++) = '\0'; printf("%s='", vname); for (val=s; *val; val++) { switch (*val) { case '%': buf[0]=*(++val); buf[1]=*(++val); buf[2]='\0'; sscanf(buf, "%2x", &c); break; case '+': c = ' '; break; default: c = *val; } switch (c) { case '\\': printf("\\\\"); break; case '\'': printf("\\'"); break; case '\n': printf("\\n"); break; default: putchar((char)c); break; } } printf("'\n"); } main() { char *query_string; char *phrase; query_string = (char *)getenv("QUERY_STRING"); if (!query_string) { printf("X_ERR='QUERY_STRING not set'\n"); exit(0); } phrase = strtok(query_string, "&"); while (phrase) { parse(phrase); phrase = strtok((char *)0, "&"); } }