[HTTP]_[C/C++]_[解析URL的转义字符百分比字符串]

时间:2023-03-08 19:51:10
[HTTP]_[C/C++]_[解析URL的转义字符百分比字符串]

场景:



1.有时候获取一个超链接时,或者一个图片src时,里面的地址带有%XX,这样如果当成文件路径处理会不识别。所以要把转义字符解码。



2.它其实就是ASCII码的十六进制表示。



以下是*提供的一个实现,很久以前找的,找不到原文了。添加了一些单元测试.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <string>
#include <windows.h>
#include <assert.h>

std::string UrlDecode(std::string &SRC)
{
    std::string ret;
    char ch;
    int ii;
    for (size_t i=0; i<SRC.length(); i++) {
        if (int(SRC[i])==37) {
            sscanf(SRC.substr(i+1,2).c_str(), "%x", &ii);
            ch=static_cast<char>(ii);
            ret+=ch;
            i=i+2;
        } else {
            ret+=SRC[i];
        }
    }
    return (ret);
}

int main(int argc, char *argv[])
{
	printf("Hello, world\n");
	std::string file_path = "C:\\Program%20File\\";

	std::string str = UrlDecode(file_path);
	assert(!strcmp(str.c_str(),"C:\\Program File\\"));

	return 0;
}