#include <sys/time.h>
#include <vector>
#include <string>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <ctype.h>
char fromHex(char x){
return (isdigit(x)) ? (x - '0') : (isupper(x) ? (x - 'A' + 10) : (x - 'a' + 10));
}
int url_decode(const char *src, char *buf, int buf_len){
char ch, n1, n2;
int s, d;
if(!src || !buf || buf_len <= 0){
return -1;
}
for (s = 0, d = 0; (ch = src[s++]) != '\0' && d < buf_len;)
{
switch(ch){
case '%':
if((n1 = src[s++]) == '\0' || (n2 = src[s++]) == '\0'){
/* wrong url */
buf[d] = '\0';
return -1;
}
else{
buf[d++] = (fromHex(n1) << 4) | (fromHex(n2));
}
break;
case '+':
buf[d++] = ' ';
break;
default:
buf[d++] = ch;
break;
}
}
if(ch == '\0'){
if(d < buf_len){
buf[d] = '\0';
return 0;
}
else{
/* overflow */
buf[d-1] = '\0';
return -1;
}
}
else{
/* buffer not enough */
buf[d-1] = '\0';
return -1;
}
}
int main()
{
char src[200];
char dst[200];
memset(src, 0, sizeof(src));
memset(dst, 0, sizeof(dst));
snprintf(src, sizeof(src), "%s", "%E5%BC%A0%E5%A5%95%E7%8E%B2");
url_decode(src, dst, sizeof(dst));
printf("src=%s\n", src);
printf("dst=%s\n", dst);
return 0;
}
url解码
猜你喜欢
转载自blog.csdn.net/qq_19385739/article/details/83012735
今日推荐
周排行