`
csstome
  • 浏览: 1509361 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

试用EF开发WEB应用程序(5): URL编码和URL解码

阅读更多

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


试用EF开发WEB应用程序(5): URL编码和URL解码

之前的文章提到,Query String是URL的一部分,那么其内容应当遵守URL的语法规则,例如不能出现 ; / ? = & 等特定字符,也不应该包含汉字字符。通常,在需要组合生成一个URL时,需要对Query String中的内容(尤其是value部分)进行“URL编码”,以确保得到一个合法的URL;在处理一个URL请求时,需要对Query String进行“URL解码”,以便还原到“URL编码”之前的Query String。CGI / FastCGI 程序在处理HTTP请求时,其从环境变量 QUERY_STRING 中获取的内容,即为已经过“URL编码”的Query String。

以之前文章中出现的URL “http://localhost:8080/querystring.efcgi?x=abc&y=ef&z=%E4%B8%AD%E5%9B%BD” 为例,其中“%E4%B8%AD%E5%9B%BD” 部分就是“URL编码”后的结果,经过“URL解码”之后,是汉字“中国”二字。

考虑到“URL编码”和“URL解码”是常见操作,EF类库 fastcgi.efn 中提供了这两项功能,同时对环境变量 QUERY_STRING 中的内容自动进行“URL解码”。

在EF类库 fastcgi.efn 中,实现“URL编码”的C++代码如下:

EFChar*URLEncode(EFChar*url,EF_MiniMem&buffer)
{
EFCharc;
EFCharhexOutputBuffer[
2];
EF_MiniMemmem;

intn=EF_strlen(url);
buffer.Alloc(n
<<1);
buffer.Empty();

for(inti=0;i<n;i++)
{
c
=url[i];
if((c>='a'&&c<='z')||(c>='0'&&c<='9')||(c>='A'&&c<='Z')
||(strchr("-_.",c)!=NULL))
{
buffer.AddChar(c);
}
elseif(c=='')
{
buffer.AddChar(myC(
'+'));
}
else
{
if(c<=255)
{
_URLEncode_addEncodeChar((unsigned
char)c,buffer,hexOutputBuffer);
}
else
{
constchar*utf8=(constchar*)EF_UCS_to_UTF8(&c,1,mem);
intlen=strlen(utf8);
for(intj=0;j<len;j++)
{
_URLEncode_addEncodeChar(utf8[j],buffer,hexOutputBuffer);
}
}
}
}
buffer.AddChar(myC(
'

在EF中,调用 FCGI.URLEncode() 即可进行“URL编码”工作。

在EF类库 fastcgi.efn 中,实现“URL解码”的C++代码如下:

EFChar*URLDecode(EFChar*url,EF_MiniMem&buffer)
{
EFCharc,
*pc;
unsigned
charutf8[3];
EF_MiniMemmem;

intn=EF_strlen(url);
buffer.Alloc(n);
buffer.Empty();

for(inti=0;i<n;i++)
{
c
=url[i];
if(c!=myC('%'))
{
buffer.AddChar((c
==myC('+')?myC(''):c));
continue;
}
utf8[
0]=fromhex(&url[i+1]);
if((utf8[0]&0x80)==0)//0xxxxxxx
{
buffer.AddChar((EFChar)utf8[
0]);
i
+=2;
}
elseif((utf8[0]>>5)==6)//110xxxxx
{
if(n-i>=6&&url[i+3]==myC('%'))
{
utf8[
1]=fromhex(&url[i+4]);ASSERT(utf8[1]>>6==2);//10xxxxxx
pc=EF_UTF8_to_UCS((char*)utf8,2,mem);
ASSERT(pc
&&EF_strlen(pc)==1);
if(pc==NULL)returnNULL;
buffer.AddChar(
*pc);
i
+=5;
}
elsereturnNULL;
}
elseif((utf8[0]>>4)==0x0E)//1110xxxx
{
if(n-i>=9&&url[i+3]==myC('%')&&url[i+6]==myC('%'))
{
utf8[
1]=fromhex(&url[i+4]);ASSERT(utf8[1]>>6==2);//10xxxxxx
utf8[2]=fromhex(&url[i+7]);ASSERT(utf8[2]>>6==2);//10xxxxxx
pc=EF_UTF8_to_UCS((char*)utf8,3,mem);
ASSERT(pc
&&EF_strlen(pc)==1);
if(pc==NULL)returnNULL;
buffer.AddChar(
*pc);
i
+=8;
}
elsereturnNULL;
}
else
returnNULL;
}

buffer.AddChar(myC(
'

在EF中,调用 FCGI.URLDecode() 即可进行“URL解码”工作。

网络浏览器在处理用户提交的FORM数据时,也会自动将FORM中的数据生成经过“URL编码”的Query String。在实践中发现,如果FORM所属HTML文件的编码为UTF-8,则汉字是按其UTF-8编码数据进行“URL编码”;如果FORM所属HTML文件的编码未指定或为非UTF-8编码,则汉字可能不是按其UTF-8编码数据进行“URL编码”。本文上面所列代码,只能按UTF-8编码进行“URL编码”和“URL解码”,使用时需要注意。

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

下文预告:解析Query String中的各参数值

分享到:
评论

相关推荐

    URL编解码程序(自己写)

    这个"URL编解码程序"就是针对这一需求开发的,主要用于网络爬虫技术中处理URL的编码和解码问题。 URL编解码主要遵循两个标准:RFC 3986(统一资源标识符的通用语法)和ISO/IEC 8859-1(拉丁字母的一号字符集)。在...

    JS实现URL编码转换中文

    在JavaScript中,提供了`encodeURIComponent`和`decodeURIComponent`两个方法来进行URL编码与解码操作。 - **`encodeURIComponent`**:该函数接受一个字符串作为参数,并返回一个经过URL编码的字符串。 - **`...

    C#自动识别URL编码,asp.net自动识别URL编码

    在IT行业中,编程语言C#和ASP.NET框架的使用非常广泛,特别是在开发Web应用程序时。本文将深入探讨“C#自动识别URL编码”的主题,帮助开发者解决URL编码带来的乱码问题。 URL编码,也称为百分号编码(Percent-...

    易语言URL网址编解码.rar

    5. **实际应用**:URL编解码常用于HTTP请求、网页链接的处理、表单数据的提交等场景。易语言的这些功能可以帮助开发者在构建网络应用程序时更方便地处理URL相关的问题。 6. **示例代码**:在易语言中,一个简单的...

    EFCore+WebAPi增删改查

    在本项目中,"EFCore+WebApi增删改查"是一个使用Entity Framework Core(简称EFCore)和Web API技术构建的.NET应用示例。这个框架主要用于演示如何通过...这是一次很好的实践,对于理解和应用现代Web开发技术大有裨益。

    asp.net源码:WebSamples,是WEB程序开发的好示例。

    ASP.NET 是微软公司推出的用于构建动态网站、Web应用程序和Web服务的一种强大框架。WebSamples 是一个包含多个ASP.NET示例的集合,它为开发者提供了学习和理解ASP.NET特性和功能的宝贵资源。在这个压缩包中,...

    ASP.NET数据库应用程序开发教程

    ASP.NET Core同样支持数据库应用开发,并与EF Core紧密结合。 九、部署与调试 在完成ASP.NET数据库应用程序的开发后,可以通过IIS或IIS Express进行本地或远程部署。Visual Studio集成的调试工具能帮助开发者定位并...

    Laborator-DAW:实验室和材料-Web应用程序开发

    实验室和材料-Web应用程序开发 :warning: :warning: 考试信息(技巧和窍门) 使用脚手架或尝试重现自动创建部分(使用实体框架的带有视图的控制器) 对于数据表,您可以使用以下示例: 在REPO的解决方案领域中...

    基于.netCore 6 +EF 实现webApi增删查改基础应用,开箱即用

    在本文中,我们将深入探讨如何使用`.NET Core 6`框架和`Entity Framework (EF)`来构建一个功能完备的Web API服务,实现数据的增、删、查、改(CRUD)操作。`.NET Core 6`是微软推出的一个高性能、跨平台的开源开发...

    一个应用.Net中C#技术开发的实用Web案例

    在.NET框架下,C#是一种广泛使用的编程语言,尤其在开发Web应用程序时。这个案例——"一个应用.Net中C#技术开发的实用Web案例",展示了如何利用C#的强大力量来构建一个功能完善的B2C(Business to Consumer)在线...

    全堆栈ASP。NET核心(.NET 8)web应用程序,具有CRUD、N轮胎体系结构、验证功能.zip

    这个项目展示了如何利用ASP.NET Core MVC(Model-View-Controller)模式来构建一个完整的Web应用程序,涵盖了CRUD(创建、读取、更新和删除)操作,同时实现了N轮胎(N-Tier)架构和验证功能。 **ASP.NET Core MVC*...

    【ASP.Net Core Web应用程序】 创建数据库

    ASP.NET Core Web应用程序是Microsoft开发的一个跨平台的框架,用于构建现代、高性能的Web应用。在本场景中,我们关注的重点是如何在ASP.NET Core中创建数据库。这通常涉及到使用Entity Framework Core (EF Core),...

    Dome-ASP.NET CORE 6 webapi 使用 EF DBFirst 配合 sql server

    ASP.NET Core 6 WebAPI与Entity Framework (EF) DBFirst结合使用是开发高效、数据库驱动的Web服务的常见方法。这个技术栈允许开发者利用SQL Server的强大功能,同时借助EF简化数据访问层的实现。以下是对这个主题的...

    使用C#开发数据库应用程序系统ACCP8.0

    在IT行业中,数据库应用程序系统是不可或缺的一部分,它们用于存储、管理和检索数据,为各种业务...对于希望在IT领域从事数据库应用开发的人员来说,“使用C#开发数据库应用程序系统ACCP8.0”是一次宝贵的学习经历。

    Asp.Net Core Web应用程序入门源码

    Asp.Net Core是一个开源的、跨平台的框架,用于构建高度可移植和高性能的Web应用程序。这个源码包“KibaAspNetCore-master”是针对初学者设计的,旨在帮助他们理解并入门Asp.Net Core Web应用程序的开发。 1. **Asp...

    c# MVC完整项目 EF连接数据库 webapi

    首先,C# MVC(Model-View-Controller)是一种用于构建可维护性和可测试性的Web应用程序的设计模式。它将应用程序分为三个主要部分:模型(Model)、视图(View)和控制器(Controller)。模型负责业务逻辑和数据...

    web聊天室(.net core MVC + signalr + EF + Authorize)

    总的来说,这个Web聊天室项目展示了如何结合使用.NET Core MVC、SignalR、EF和Authorize来构建一个功能完善的、具有实时通信、数据库管理和权限控制的Web应用程序。开发者可以从中学习到如何设计和实现这类交互式...

    Vorx解码库

    它们通常以动态链接库(DLL)或静态库的形式存在,供开发者在自己的应用程序中调用,实现对各种编码格式的支持,而无需从零开始编写解码代码。 Vorx解码库可能包含了以下几种常见的解码方式: 1. 视频解码:例如,...

    ASP.NET Core 和EF Core官方中文文档

    ASP.NET Core和Entity Framework Core(简称EF Core)是Microsoft开发的两个关键的开源框架,用于构建现代、云就绪的互联网应用程序。ASP.NET Core是下一代的ASP.NET框架,而EF Core是轻量级且高性能的对象关系映射...

    基于MATLAB的图像压缩程序(包含各种压缩编码与解码方法)

    本资源"基于MATLAB的图像压缩程序"集合了多种压缩编码与解码方法,旨在帮助学习者深入理解图像压缩原理,并通过实践提升技能。MATLAB作为一种强大的数值计算和可视化工具,非常适合用于此类实验和研究。 首先,我们...

Global site tag (gtag.js) - Google Analytics