Delphi下URL汉字编码解码的两个函数
//汉字URL编码函数
function URLEncode(const S: string; const InQueryString: Boolean): string;
var
Idx: Integer; //逐个字符循环直至字符串结束
begin
Result := '';
for Idx := 1 to Length(S) do
begin
case S[Idx] of
'A'..'Z', 'a'..'z', '0'..'9', '-', '_', '.':
Result := Result + S[Idx];
' ':
if InQueryString then
Result := Result + '+'
else
Result := Result + '%20';
else
Result := Result + '%' + SysUtils.IntToHex(Ord(S[Idx]), 2);
end;
end;
end;
//汉字URL解码函数
function URLDecode(const S: string): string;
var
Idx: Integer; //逐个字符循环直至字符串结束
Hex: string; //十六进制字符串
Code: Integer; //十六进制字符(-1表示错误)
begin
//初始化解码结果和字符串索引
Result := '';
Idx := 1;
//逐个字符循环解码
while Idx <= Length(S) do
begin
case S[Idx] of
'%':
begin
//%后面应跟两个Hex字符,否则抛出异常
if Idx <= Length(S) - 2 then
begin
//必须有足够的位数,解码十六进制数据
Hex := S[Idx+1] + S[Idx+2];
Code := SysUtils.StrToIntDef('$' + Hex, -1);
Inc(Idx, 2);
end
else
//位数不足,出错
Code := -1;
//检查异常,如果检查到就抛出异常
if Code = -1 then
raise SysUtils.EConvertError.Create(
'Invalid hex digit in URL'
);
//解码成功,并将字符加到Result里
Result := Result + Chr(Code);
end;
'+':
//+将解码为空格
Result := Result + ' '
else
//其他字符不用解码
Result := Result + S[Idx];
end;
Inc(Idx);
end;
end;
使用实例:
procedure TForm1.Button1Click(Sender: TObject);
begin
Edit2.Text := URLEncode(edit1.Text,false);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Edit1.Text := URLDecode(Edit2.Text);
end;
http://www.lsworks.net/article/40.html
Delphi下URL汉字编码解码的两个函数的更多相关文章
- base64编解码的两个函数
base64编解码的两个函数,声明,参考网络上的代码实现. unsigned char *base64_encode(unsigned char *str, long* lpBufLen) { lon ...
- base64编解码的两个函数(安全版本)
void base64_encode_s(const unsigned char *str, long inlen, std::string& outstr, long* lpBufLen) ...
- Delphi中处理URL编码解码
Delphi中处理URL编码解码 一.URL简单介绍 URL是网页的地址,比方 http://www.shanhaiMy.com. Web 浏览器通过 URL 从 web server请求页面 ...
- delphi中URL的汉字编码
delphi中URL的汉字编码 show.asp?sort=全部&sortlevel=1&gorq=供&n=5&sitename=全部&img=yes& ...
- [转]URL汉字编码问题(及乱码解决)
一.问题的由来 URL就是网址,只要上网,就一定会用到. 一般来说,URL只能使用英文字母.阿拉伯数字和某些标点符号,不能使用其他文字和符号.比如,世界上有英文字母的网址 “http://www.ab ...
- 详解JavaScript中的Url编码/解码,表单提交中网址编码
本文主要针对URI编解码的相关问题做了介绍,对Url编码中哪些字符需要编码.为什么需要编码做了详细的说明,并对比分析了Javascript 中和 编解码相关的几对函数escape / unescape ...
- sed处理url编码解码=== web日志的url处理
URL 编码/解码方法(linux shell实现),方法如下: 1.编码的两种方法: admin@~ 11:14:29>echo '手机' | tr -d '\n' | xxd -plain ...
- ASP.NET中Url编码解码
今天遇到Url编码解码的问题,纠结了一天的时间,结果上网一查才发现太二了我们. 同事写的代码把url用HttpUtility.UrlEncode编码和解码了,本地测试没有问题,部署到服务器上就提示转码 ...
- DELPHI下的SOCK编程(转)
DELPHI下的SOCK编程 本文是写给公司新来的程序员的,算是一点培训的教材.本文不会涉及太多的编程细节,只是简单讲解在DELPHI下进行Winsock编程最好了解的知识. 题外话:我认为 ...
随机推荐
- java初学者必看经典
配置java环境变量: JAVA_HOME:配置JDK的目录 CLASSPATH:指定到哪里去找运行时需要用到的类代码(字节码) PATH:指定可执行程序的位置 LINUX系统(在" .ba ...
- Python爬虫实战(3):安居客房产经纪人信息采集
1, 引言 Python开源网络爬虫项目启动之初,我们就把网络爬虫分成两类:即时爬虫和收割式网络爬虫.为了使用各种应用场景,该项目的整个网络爬虫产品线包含了四类产品,如下图所示: 本实战是上图中的“独 ...
- python中的星号*、**的意义
我们都知道,定义一个函数,当传入的参数个数未知时就可以使用*来表示. 单引号*: def test(*args): if len(args) >= 4: print(arg[3]) test(1 ...
- Android manifest
manifest是Android应用程序的配置文,在这里指定了改程序的资源.权限等内容,一般的manifest文件如下 <manifest xmlns:android="http:// ...
- DataSet 中的数据排序 及 DataRow装成DataTable
1.DataSet 中的数据排序 DataSet ds = new DataSet(); // 获取当前排口的数据 ds = _xiaobill.GetHistoryData(yinZiBianm, ...
- 14.3.5 LOCK TABLES and UNLOCK TABLES Syntax
14.3.5 LOCK TABLES and UNLOCK TABLES Syntax LOCK TABLES tbl_name [[AS] alias] lock_type [, tbl_name ...
- boost库的安装,使用,介绍,库分类
1)首先去官网下载boost源码安装包:http://www.boost.org/ 选择下载对应的boost源码包.本次下载使用的是 boost_1_60_0.tar.gz (2)解压文件:tar - ...
- libevent evbuffer bug
今天发现 libevent 2.0.22 一个坑爹的bug,导致消息混乱.查找问题浪费一天,复现代码如下 #include <event2/buffer.h> #include <s ...
- Eclipse被汉化后恢复EN模式
问题描述: 在安装Flush builder 的时候安装了汉化包,导致Eclipse中功能显示为汉字. 问题解决: 在Eclipse快捷方式下“目标”路径中添加-nl "EN"即可 ...
- Javascript数组操作方法
1.shift:删除原数组第一项,并返回删除元素的值:如果数组为空则返回undefined var a = [1,2,3,4,5]; var b = a.shift(); //a:[2,3,4,5] ...