当前位置: 首页 > news >正文

做网站创新互联/太原搜索排名提升

做网站创新互联,太原搜索排名提升,企业为什么要ipo,wordpress电影主题博客题记:用“易语言.飞扬”(EF)开发WEB应用程序,此前还没有先例。但因为EF本地开发包(EFNDK)已经发布,用C/C开发一个EF类库,使其支持EF开发WEB应用程序,应该并非难事。当然也…

题记:用“易语言.飞扬”(EF)开发WEB应用程序,此前还没有先例。但因为EF本地开发包(EFNDK)已经发布,用C/C++开发一个EF类库,使其支持EF开发WEB应用程序,应该并非难事。当然也可想而知,其中必有诸多难点有待解决。此系列文章,为本人探索过程之记录,对外人未必有多大价值。如有网友乐观其事,还请理性待之。作者:liigo。转载请务必注明出处:http://blog.csdn.net/liigo/。在线留言。


试用EF开发WEB应用程序(6):解析Query String中的各参数值

之前的文章提到,Query String的主要形式是 name1=value1&name2=value2&...,即由 & 符号分隔的多个“名称=值”文本(有时“值”为空,其形式为“名称=”)。在 CGI / FastCGI 程序(以及 JSP/ASP/PHP/PERL等)中,对QueryString进行文本处理,解析出其各“名称”“值”,以便根据“名称”获取对应的值,是非常普遍的操作。这甚至可以理解的 CGI / FastCGI 程序的核心动作,——没有此动作,大部分程序将无法工作。在EF类库 fastcgi.efn 中,我内置了QueryString解析功能。

QueryString是很规则的文本,处理起来不难,主要应该考虑执行效率。在解析之前,有两个准备工作:1、从环境变量QUERY_STRING中读取QueryString文本;2、对上一步得到的QueryString进行URL解码。然后,正常的解析工作就开始了。下面列出EF类库fastcgi.efn 中解析 QueryString 的C++代码:

void_FCGIClass_ParseQueryString_IfNeed(FCGIClass_FieldsData*pFields)
{
if(pFields->hasParsedQueryString)return;
pFields->hasParsedQueryString = EF_TRUE;

_FCGIClass_Read_QUERY_STRING_IfNeed(pFields);

EFChar
*szQueryString=EF_GET_TEXT(pFields->queryString);
if(szQueryString[0]==myC('/0'))
{
EF_DEC_REF_COUNT(pFields
->queryStringNames);pFields->queryStringNames=EF_EMPTY_ARRAY;
EF_DEC_REF_COUNT(pFields
->queryStringValues);pFields->queryStringValues=EF_EMPTY_ARRAY;
return;
}

EF_MiniMemnames,values;
names.AddInt(
0);names.AddInt(1);names.AddInt(0);
values.AddInt(
0);values.AddInt(1);values.AddInt(0);

EFChar
*ps=szQueryString;
EFChar
*psFrom=szQueryString;
intcount=0;
boolinName
=true;

for(;;ps++)
{
if(*ps==myC('='))
{
names.AddInt((EFInt)_NewEFText(psFrom,ps
-psFrom));
psFrom
=ps+1;
count
++;
inName
=false;
}
elseif(*ps==myC('&'))
{
if(inName)//key1&...
{
names.AddInt((EFInt)_NewEFText(psFrom,ps
-psFrom));
values.AddInt((EFInt)EF_EMPTY_TEXT);
psFrom
=ps+1;
count
++;
continue;
}

values.AddInt((EFInt)_NewEFText(psFrom,ps
-psFrom));
psFrom
=ps+1;
inName
=true;
}
elseif(*ps==myC('/0'))
{
if(*(ps-1)==myC('&'))//key1=value1&
break;

if(inName)//key1
{
names.AddInt((EFInt)_NewEFText(psFrom,ps
-psFrom));
values.AddInt((EFInt)EF_EMPTY_TEXT);
count
++;
}
else
values.AddInt((EFInt)_NewEFText(psFrom,ps
-psFrom));

break;
}
}

names.ReplaceInt(
2*sizeof(EFDWord),count);
values.ReplaceInt(
2*sizeof(EFDWord),count);

EFArraynameArray
=EF_GC_REG_TEXT_ARRAY_DATA(names.Detach());
EFArrayvalueArray
=EF_GC_REG_TEXT_ARRAY_DATA(values.Detach());
EF_DEC_REF_COUNT(pFields
->queryStringNames);pFields->queryStringNames=nameArray;
EF_DEC_REF_COUNT(pFields
->queryStringValues);pFields->queryStringValues=valueArray;

//cachetohashmap
EFText*pNames=(EFText*)((EFByte*)nameArray+3*sizeof(EFDWord));
EFText
*pValues=(EFText*)((EFByte*)valueArray+3*sizeof(EFDWord));
for(inti=count-1;i>=0;i--)
{
pFields
->queryStringNameValueHashmap->Set(EF_GET_TEXT(pNames[i]),pValues[i]);
}
}

代码应该是比较清晰的。首先是处理缓存,如果之前已经解析过一次,直接使用上次解析结果;如果曾经读取(包括进行URL解码)过QueryString,直接使用已经读取并解码后的值,不进行重复工作。接下来是文本解析,得到“名称”数组,及与其对应的“值”数组,这两个数组的成员是一一对应的。最后,依然是缓存,将各“名称”“值”配对放入一个哈希表中,以便此后可以根据“名称”高速查询得到“值”。在EF程序中,当 fcgi.QUERY_STRING(name) 被调用时,除了第一次调用时需进行解析工作外,后续调用则直接从哈希表中查询得到结果,执行效率应该是非常高的。(今后我可能会实际测试一下结果,研究它对程序执行效率的提升究竟有多么明显。) 在上面的C++代码中,对一些非正常的、不合法的QueryString,也有适当的容错处理。

如果代码有错误或疏忽、遗漏之处,请各位批评指正。

注意:本文给出的代码在处理顺序上存在错误,需先分隔再解码,而不应该先解码再分隔!用围棋上的术语说是“次序错了”。这个是必须更正的,有时间我马上处理。

下文预告:“简单计算器”实例程序

http://www.jmfq.cn/news/4839355.html

相关文章:

  • 对网站访客做简要分析/seo优化顾问
  • wordpress自豪的采用/关键词优化seo费用
  • 黄石做网站/成都高端品牌网站建设
  • 织梦教育网站模板/郑州网络推广平台
  • 天津网站建设学习/网店推广营销方案
  • 动态网站建设与管理课程设计报告/百度一下百度搜索官网
  • vi设计公司 北京/手机网站关键词seo
  • 赣州营销公司/seo关键词怎么选择
  • 英文wordpress建站/网站关键词怎么写
  • 英文网站建设 济南/网络推广途径
  • 如何做正版小说网站/第一营销网
  • 河南手机网站建设多少钱/百度关键词优化教程
  • 专业做seo的网站/最好用的搜索引擎
  • 俄罗斯服务器网站/免费b站推广软件
  • 公司网站改版需要怎么做/国外b站浏览器
  • 设计公司网站案例/优惠活动推广文案
  • 公司网站备案怎么做/账户竞价托管哪里好
  • 安徽网站建设推荐 晨飞网络/seo流量是什么意思
  • 代理分销系统开发/广东seo外包服务
  • 石家庄最新疫情最新消息解封/seo积分优化
  • wordpress自定义文章列表/海城seo网站排名优化推广
  • 重庆网站备案必须到核验点/百度统计工具
  • 做个网站多少钱一个月/福州seo公司
  • 做暧嗳xo小视频免费网站/今日桂林头条新闻
  • 浙江网站推广/百度关键词推广价格查询
  • phpwind怎么做网站/网站项目开发流程
  • b2b网站如何做社群运营/国内搜索引擎
  • 武汉做胃镜国医堂z网站/网络营销的营销策略
  • qq钓鱼网站在线生成器/b站推广网站2022
  • 实时定量引物设计网站怎么做/怎么做市场营销和推广