/nginx-1.0.1/src/http|ngx_http_upstream.c
1822: 原代码 uri = &u->headers_in.x_accel_redirect->value;
1822: 新增代码 uri -> len = urldecode(uri->data,uri -> len);
附送 C 实现 urldecode
/**
* @param str 需要解码的url字符串
* @param len 需要解码的url的长度
* @return int 返回解码后的url长度
*/
static int urldecode(char *str, int len)
{
char *dest = str;
char *data = str;
int value;
int c;
while (len--) {
if (*data == '+') {
*dest = ' ';
}else if (*data == '%' && len >= 2 && isxdigit((int) *(data + 1))
&& isxdigit((int) *(data + 2))){
c = ((unsigned char *)(data+1))[0];
if (isupper(c))
c = tolower(c);
value = (c >= '0' && c <= '9' ? c - '0' : c - 'a' + 10) * 16;
c = ((unsigned char *)(data+1))[1];
if (isupper(c))
c = tolower(c);
value += c >= '0' && c <= '9' ? c - '0' : c - 'a' + 10;
*dest = (char)value ;
data += 2;
len -= 2;
} else {
*dest = *data;
}
data ++;
dest ++;
}
*dest = '\0';
return dest - str;
}