且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

url解码字符串的函数

更新时间:2023-02-23 12:27:33

" Ramprasad A Padmanabhan" <我**** @ netcore.co.in>在消息中写道

新闻:3F *************** @netcore.co.in ...
"Ramprasad A Padmanabhan" <my****@netcore.co.in> wrote in message
news:3F***************@netcore.co.in...
你好,

任何人都可以告诉我在哪里可以找到一个可以解码网址的函数
编码的字符串

ram%40domain.tld ==> ra*@domain.tld




写一个,不是那个意思程序员正在?

剥离%,然后接下来的2个字符并将它们从

ascii-hex转换为ascii。



Write one, isn''t that what a programmer is being?
strip off the "%", then take the next 2 characters and convert them from
ascii-hex to ascii.





Ramprasad A Padmanabhan写道:


Ramprasad A Padmanabhan wrote:

您好,

任何人都可以告诉我在哪里可以找到一个可以解码网址的函数
编码的字符串

Hello,

Can anyone tell me where Can I find a function that can decode a url
encoded string



这是一个很常见的事情。做谷歌搜索cgi实用程序
用b写的



Brian Rodenborn


This is a very common thing. Do a google search for cgi utilities
written in C.

Brian Rodenborn




Ramprasad A Padmanabhan< my **** @ netcore.co.in>在消息中写道

新闻:3F *************** @netcore.co.in ...

Ramprasad A Padmanabhan <my****@netcore.co.in> wrote in message
news:3F***************@netcore.co.in...
你好,

任何人都可以告诉我在哪里可以找到一个可以解码网址的函数
编码的字符串

ram%40domain.tld ==> ra *@domain.tld



/ *(不包括错误检查)* /


#include< stdio.h>

#include< stdlib.h>

#include< string.h>


void cvt(char * dest,const char * src)

{

const char * p = src;

char code [3] = {0};

unsigned long ascii = 0;

char * end = NULL;


while(* p)

{

if(* p ==''%'')

{

memcpy(代码,++ p,2);

ascii = strtoul(代码,& end,16);

* dest ++ =( char)ascii;

p + = 2;

}

else

* dest ++ = * p ++;

}

}


int main()

{

char in [] =" ram%40domain.tld";

char out [sizeof in] = {0};

cvt(out,in);

printf(" in ==%s\\\
out ==%s \ n",in,out);

返回0;

}


-Mike



/* (no error checking included) */

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

void cvt(char *dest, const char *src)
{
const char *p = src;
char code[3] = {0};
unsigned long ascii = 0;
char *end = NULL;

while(*p)
{
if(*p == ''%'')
{
memcpy(code, ++p, 2);
ascii = strtoul(code, &end, 16);
*dest++ = (char)ascii;
p += 2;
}
else
*dest++ = *p++;
}
}

int main()
{
char in[] = "ram%40domain.tld";
char out[sizeof in] = {0};
cvt(out, in);
printf("in == %s\nout == %s\n", in, out);
return 0;
}

-Mike