// URL_test.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 判断字符是否需要进行 URL 编码
static bool needs_encoding(char c)
{
if ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') ||
(c >= '0' && c <= '9') || c == '_' || c == '.' || c == ':' || c == '-' || c == '/' || c == '?' || c == '&' || c == '=')
{
return false;
}
return true;
}
// 对字符进行 URL 编码,返回编码后的字符串
static char *url_encode_char(char c)
{
static char hex[] = "0123456789ABCDEF";
char *encoded = (char *)malloc(4);
if (encoded)
{
encoded[0] = '%';
encoded[1] = hex[(c >> 4) & 0x0F];
encoded[2] = hex[c & 0x0F];
encoded[3] = '\0';
}
return encoded;
}
// 对字符串进行 URL 编码,返回编码后的字符串
char *encode_uri(const char *str)
{
int len = strlen(str);
char *encoded = (char *)malloc(3 * len + 1);
if (encoded)
{
int pos = 0;
for (int i = 0; i < len; i++)
{
if (needs_encoding(str[i]))
{
char *encoded_char = url_encode_char(str[i]);
if (encoded_char)
{
strcpy(&encoded[pos], encoded_char);
pos += 3;
free(encoded_char);
}
}
else
{
encoded[pos++] = str[i];
}
}
encoded[pos] = '\0';
}
return encoded;
}
int main()
{
const char *uri = "http://www.test.url编码处理测试.png";
char *encoded_uri = encode_uri(uri);
if (encoded_uri)
{
printf("原始 URI: %s\n", uri);
printf("编码后 URI: %s\n", encoded_uri);
free(encoded_uri);
}
else
{
printf("URI 编码失败\n");
}
return 0;
}
字符串进行 URL 编码处理
最新推荐文章于 2024-07-23 10:27:38 发布