/* create by woundedsoul
* 本类是处理变量及其关联值
* 本人在暑假中没事干!偶尔看到一篇说用Delphi写CGI程序的文章
* 于是我想用C++为自已做一个动态网站吧!本来是想学ASP做的无
* 赖本人太懒(能用C++写何不用呢?呵呵!)
* 偶这个留言本是用文本文件存储访客留言的,不过我正打算把它转到Mysql 数据库里
*
*
*
*
*
*
*/
//---------------------------webtools.h-----------------------------//
#include<memory.h>
#include<stdlib.h>
class URL
{
public:
URL(char * string);
~URL();
char* operator [](const char * varname);
int Pos(const char *Data,char ch); //返回Ch在字串中第一次出现的位置
int Pos(const char *Data,const char*sub); //返回sub子串在字符串第一次出现的位置
int Pos(const char *Data,int begin,char ch); //返回Ch在字符串从begin后第一次出现位置
char * Sub(const char *Data,int begin,int end); //返回子串
char * ExtractFromData(const char * Data,const char * tag);
char * decodeURLString(const char* URLstr); //对客户端浏览器返回的数据流进行解码
char translateHex(char hex); //转换成16进制
private:
char *str; //解码前的URL
char *decode_str; //解码后的URL
};
//以下是类的实现部分
//--------------------------------------------------------------------------------------------------------------------------------------------
URL::URL(char* string)
{
int len=strlen(string);
str=new char[len+1];
strcpy(str,string);
str[len]='\0';
decode_str=decodeURLString(str);
}
//--------------------------------------------------------------------------------------------------------------------------------------------
URL::~URL()
{
delete str;
}
char * URL:: operator[](const char *varname)
{
return ExtractFromData(decode_str,varname);
}
//--------------------------------------------------------------------------------------------------------------------------------------------
int URL::Pos(const char *Data,char ch)
{
int length_Data=strlen(Data);
for(int i=0;i<length_Data;i++)
{
if(Data[i]==ch)
return i;
else
continue;
}
return -5000;
}
//--------------------------------------------------------------------------------------------------------------------------------------------
int URL::Pos(const char *Data,const char*sub)
{
int token=0;
int length_Data=strlen(Data);
int length_sub=strlen(sub);
for(int i=0;i<length_Data;i++)
{
token=0;
for(int j=0;j<length_sub;j++)
{
if(Data[i+j]==sub[j])
{
token++;
}
}
if(token==length_sub)
return i;
else
continue;
}
return -5000;
}
//--------------------------------------------------------------------------------------------------------------------------------------------
int URL::Pos(const char *Data,int begin,char ch)
{
int length_data=strlen(Data);
if(begin<0)
return -5000;
for(int i=begin;i<length_data;i++)
if(Data[i]==ch)
return i;
else
continue;
return -5000;
}
//--------------------------------------------------------------------------------------------------------------------------------------------
char * URL:: Sub(const char *Data,int begin,int end)
{
int length_Data=strlen(Data);
int count=end-begin;
if(count<0)
exit(1);
char *temp=new char[count+1];
temp[count]='\0';
if(temp!=NULL)
{
for(int i=0;i<count;i++)
{
temp[i]=Data[begin+i];
}
return temp;
}
else
return NULL;
}
//--------------------------------------------------------------------------------------------------------------------------------------------
char URL::translateHex(char hex)
{
if(hex >= 'A')
return (hex & 0xdf) - 'A' + 10;
else
return hex - '0';
}
//--------------------------------------------------------------------------------------------------------------------------------------------
//----------------------解码浏览器返回的URL数据-----------------------------------------------------------------------------------------------
char * URL::decodeURLString(const char* URLstr)
{
int len = strlen(URLstr);
char* result = new char[len + 1];
memset(result, len + 1, 0);
for(int i = 0, j = 0; i <= len; i++, j++) {
if(URLstr[i] == '+')
result[j] = ' ';
else if(URLstr[i] == '%') {
result[j] =
translateHex(URLstr[i + 1]) * 16 +
translateHex(URLstr[i + 2]);
i += 2;
} else
result[j] = URLstr[i];
}
return result;
}
//--------------------------------------------------------------------------------------------------------------------------------------------
//-----------------------从URL中提取变量的值--------------------------------------------------------------------------------------------------
char * URL::ExtractFromData(const char * Data,const char * tag)
{
int position=0;
int position1=0;
position=Pos(Data,tag);
if(position>=0)
{
position1=Pos(Data,position,'&');
if((position+1+strlen(tag))==position1)
return NULL; //如果为空则返回NULL
if(position1>0)
return Sub(Data,(position+1+strlen(tag)),position1);
else
return Sub(Data,(position+1+strlen(tag)),strlen(Data));
//return NULL;
}
else
{
return NULL;
}
}
//--------------------------------------------------------------------------------------------------------------------------------------------
GET 方法最简单了!
char *str=getenv("QUERY-STRING")就可以读到用GET文法从URL返回的数据了!
下面是POST方法!
char *len=getenv("CONTENT-LENGTH");
int length=atoi(len);
char *str=new char[length+1];
str[length]='\0';
cin.read(str,length);
分享到:
相关推荐
自己用c++语言写成的计算器,运用了数据结构的堆栈和链表的知识。能支持+-*/以及括号()运算,根据人们的计算习惯,先算括号里的再算*/最后+-。支持六位整数、六位整数与六位小数组成的浮点数。强大的容错机制,能...
***上次发了一个自己用c++语言写成的计算器,如果大家喜欢的话,可以下载源码来学习学习。资源分不多,还望大家的支持******本程序运用了数据结构的堆栈和链表的知识。能支持+-*/以及括号()运算,根据人们的计算习惯...
**IDW插值算法C++实现详解** IDW(Inverse Distance Weighting,反距离加权)是一种常见的空间插值方法,常用于地理信息系统(GIS)中,用于估算未知点的属性值。它基于一个简单的原理:近处的点对目标点的影响大于...
《一个很豪华的留言本程序》 在信息技术领域,开发一个豪华且美观的留言本程序是许多初学者和专业开发者热衷的项目。这个“很豪华的留言本程序”不仅提供了基本的留言功能,还注重了用户体验和界面设计,使得用户在...
sybase12.5.2版本从下载到安装、配置、使用c++demo进行访问连接的全流程,如果资源失效,请及时留言
自己用C++写的类似CE 的内存修改工具 工作忙目前只写了 4字节整数 功能 发布源码给新手参考 VS2010及以上版本编译 调试 需修改权限,在项目 配置属性-->链接器-->清单文件-->UAC 执行级别.改成requireAdministrator ...
LBP是人脸识别中一种有效的特征提取算法,本程序把LBP算法封装成了一个类,简单易懂,可以直接应用在自己的工程里。 严正敬告:你不要可以不下,我自己留着以后作参考,我不知道你们的需求是什么,也不要觉得是我要...
本资源实现如下:用C++架构了一个适合windows游戏开发的简易框架,效仿的MFC,能使用MFC类库进行面相对象游戏编程,简单实用 我将其取名为BCF:BlueCoder Frame 大家可以多多测试一下,如发现bug,请到我的博文中...
【标题】:“一个多用户留言本”是一个典型的网络应用程序,它允许多个用户在同一个平台上相互交流,分享信息或者提出问题。这种系统通常应用于论坛、社区网站或者是个人博客等,为用户提供了一个方便的互动环境。 ...
《玩具中国简易留言本》是一款简洁易用的留言系统,其设计目的在于提供一个基础的交流平台,用户可以通过它进行简单的信息交互。整个程序结构紧凑,只包含一个文件和数据库,使得部署和管理变得极其便捷。在本文中,...
【留言本程序】是一种常见的网站交互功能,它允许访客在网站上留下信息,与网站所有者或者其他访客进行交流。在互联网初期,由于移动设备的限制,【wap】(Wireless Application Protocol,无线应用协议)技术...
本项目“简单的留言系统”旨在展示一个基础的实现,帮助初学者理解此类系统的核心概念和技术架构。 1. **系统架构** 在线留言系统的架构通常包含前端用户界面、后端服务器处理和数据库存储三部分。前端负责用户...
在本项目中,"C++基于MFC课程设计——学习公社"是一个利用Microsoft Foundation Classes (MFC)库进行开发的C++应用程序,旨在创建一个学习平台。MFC是微软为Windows操作系统提供的一套C++类库,它简化了Windows应用...
《超小的留言本(黑色风格)》是一款简洁而实用的留言系统,其特色在于体积小巧,数据库仅由两个文件组成。这样的设计使得该留言本在安装和运行时占用资源极低,尤其适合那些对服务器性能有较高要求或资源有限的网站...
《浪漫星空留言本 v1.26B》是一款经典的在线留言板程序,它的出现为网站提供了互动交流的功能,让用户能够在网站上留下自己的想法、建议或者情感表达。这款软件的标签包括“下载”、“源代码”、“源码”和“留言板...
在本项目中,"仿QQ登陆聊天界面源码C++" 是一个基于C++编程语言实现的模拟QQ登录和聊天界面的应用程序。这个源码旨在帮助开发者理解和学习如何构建一个基本的即时通讯软件,它包含了多个关键功能,如聊天、留言、...
《梦想家园留言板2008(Build 0521):深入解析源代码》 “梦想家园留言板2008(Build 0521)”是一款基于源代码开发的应用程序,旨在为用户提供一个在线交流的平台,使用户能够在虚拟的“家园”中留言互动。这个项目...
本资源是一个关于C++实现TCP通信的项目,适合初学者进行模块协议开发,通过学习,你可以深入理解TCP通信的基本原理及其在C++中的实际应用。 TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议。它首先建立...
【香帅小屋留言本 v1.22】是一款基于CGI(Common Gateway Interface)技术的留言板软件,由开发者Kiu制作。CGI是一种在Web服务器上运行外部程序的标准协议,使得网页能够与用户交互,实现动态内容生成。在这个特定的...
C++PCM音频格式录音(双缓存MFC版本),详情见博客,有问题到博客留言,这边不会推送,很少会看到 http://blog.csdn.net/weixinhum/article/details/76158998