// 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 编码,返回编码后的字符串staticchar*url_encode_char(char c){staticchar 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(constchar*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;}intmain(){constchar*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");}return0;}