我正在开发一个关于linux的c / c程序.如果有任何c / c库解码url,你能告诉我吗?
我正在寻找哪些图书馆
兑换
“HTTP://”
至:
“HTTP://”
要么
“t&t”到“t& t”
谢谢.
解决方法:
我实际上在我正在编写的分析程序中使用了Saul的功能(分析了数百万个URL编码的字符串),虽然它有效,但是在这个规模上,它使我的程序放慢了速度,所以我决定写一个更快的版本.使用GCC和-O2选项编译时,这个速度要快几千倍.它也可以使用与输入相同的输出缓冲区(例如,如果原始字符串在buf中并且要被其解码的对应物覆盖,则urldecode2(buf,buf)将起作用).
编辑:它没有将缓冲区大小作为输入,因为假设缓冲区足够大,这是安全的,因为已知输出的长度总是< =输入的长度,所以要么为输出使用相同的缓冲区,要么创建一个至少为null终止符的输入1的大小,例如:
char *output = malloc(strlen(input)+1);
urldecode2(output, input);
printf("Decoded string: %s\n", output);
编辑2:一位匿名用户试图编辑这个答案以处理”字符的翻译”,我认为应该这样做,再次这不是我申请所需要的,但我在下面添加了它.
这是例程:
#include
#include
void urldecode2(char *dst, const char *src)
{
char a, b;
while (*src) {
if ((*src == '%') &&
((a = src[1]) && (b = src[2])) &&
(isxdigit(a) && isxdigit(b))) {
if (a >= 'a')
a -= 'a'-'A';
if (a >= 'A')
a -= ('A' - 10);
else
a -= '0';
if (b >= 'a')
b -= 'a'-'A';
if (b >= 'A')
b -= ('A' - 10);
else
b -= '0';
*dst++ = 16*a+b;
src+=3;
} else if (*src == '+') {
*dst++ = ' ';
src++;
} else {
*dst++ = *src++;
}
}
*dst++ = '\0';
}
标签:c-3,c,linux
来源: https://codeday.me/bug/20190928/1828662.html