Delphi url 编码及转码及特殊字符串替换--百度和腾讯用的就是这个
先介绍一下,Delphi中处理Google的URL编码解码,其中就会明白URL编码转换的方法的
从delphi的角度看Google(谷歌)URL编码解码方式
在网上搜索了一下,似乎没有什么关于google的URL编码解码的很详细的资料,因此在这里写一下,希望给有用的人提供一点帮助。
使用google谷歌搜索一下关键词,对应的编码如下:
刀:%E5%88%80
刀具:%E5%88%80%E5%85%B7
刀具网:%E5%88%80%E5%85%B7%E7%9A%84
因此可见,google对URL的编码并非简单的httpencode编码,因为httpencode编码后的字符串应该是带有两个百分号的,而这个是三个百分号。多尝试一下就不难发现googleURL的编码解码规则如下:
1、编码,先UTF8编码,然后再URL编码。
使用delphi编码的方法:加入待编码原始字符串为OiginStr,则编码后的字符串为:
NewStr:=HttpEncode(UTF8Encode(OiginStr))
其中HttpEncode函数需要用到HttpApp,记得uses中加入。
2、解码,先URL解码,然后再UTF8解码。
使用delphi解码的方法:加入待解码字符串为NewStr,则解码后的原始字符串为:
OiginStr:=UTF8Decode(HttpDecode(NewStr))
其中HttpEncode函数需要用到HttpApp,记得uses中加入。
相对来说百度就简单得多,一个httpencode就搞定了
对于特殊字符如 *,空格等,Delphi会编译成* 和+,这样就不能通过URL编译,所以需要用到下面的函数。
function StringReplace (const S, OldPattern, NewPattern: string; Flags: TReplaceFlags): string;
rfReplaceAll:全部替换
rfIgnoreCase:忽略大小写
For Example:
var
aStr: String;
begin
aStr := 'This is a book, not a pen!';
ShowMessage(StringReplace (aStr, 'a', 'two', []));//This is two book, not a pen!只替换了第一个符合的字
ShowMessage(StringReplace (aStr, 'a', 'two', [rfReplaceAll]));//This is two book, not two pen!替换了所有符合的字
aStr := 'This is a book, not A pen!';
ShowMessage(StringReplace (aStr, 'a', 'two', [rfReplaceAll]));//This is two book, not A pen!只替换了符合的字(小写a)
ShowMessage(StringReplace (aStr, 'a', 'two', [rfReplaceAll, rfIgnoreCase]));//This is two book, not two pen!不管大小写替换了所有符合的字
end;
这样,我们只有调用两次stringreplace函数就搞定了。
http://blog.csdn.net/syndicater/article/details/17787065
最新文章
- 16-1-27---图解HTTP(02)
- 中国电信大亚DP607光猫破解,设置路由,wifi!关闭远程管理,改连接限制,SN码查询!
- Greedy:Cleaning Shifts(POJ 2376)
- 题目1005:Graduate Admission
- C如何使用内存
- Call to undefined function pg_
- c# winfrom 委托实现窗体相互传值
- vsftpd配置---------------------之chroot_local_user和chroot_list_enable含义
- 【Android Developers Training】 87. 序言:同步到云
- zookeeper启动异常
- Cloudstack网络分析-基本网络
- 项目部署Vue+Django(luffy)
- 运维笔记--ubuntu管理启动项
- vs2017 代码格式化 文档排版 编辑 设置文档的格式
- Linux常用命令汇总 - Linux Shell Cheat Sheet
- 2.vo传参模式和ModerDriven传参模式
- reac——父组件向子组件传递值,子组件何时能同步获得父组件改变后的值
- Maximum Flow and Minimum Cut
- Android 对话框(Dialogs)
- Storm完整例子
热门文章
- CentOS 6.5开放80端口方法
- 符号函数(sign function)性质及应用
- 【心情】CF
- WPF中 PropertyPath XAML 语法
- 机器学习: t-Stochastic Neighbor Embedding 降维算法 (二)
- eclipse中JUnit工具的使用
- Mysql主从复制,读写分离(mysql-proxy)
- [Elasticsearch] 分布式搜索
- matlab 警告(warning)、错误(error)、异常(exception)与断言(assert)
- Codeforces Round #263 (Div. 2) proA