开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 6388|回复: 22
收起左侧

[已回应] 编码_URL编码_快速

[复制链接]
结帖率:100% (11/11)
发表于 2018-9-1 16:17:51 | 显示全部楼层 |阅读模式   陕西省渭南市
经测试,编码_GB2312到UTF8不支持URL编码里的一些符号,所以代码里没有加入UTF-8支持.
可以自行先转码再调用本代码.

为了提升效率.代码是分了两个部分,一个是全编码.一个不编码数字字母符号的.
通过总接口统一使用.

  
子程序名返回值类型公开备 注
汇编URL全编码  
参数名类 型参考可空数组备 注
局_表整数型
局_目标地址整数型
局_转换内容长度整数型
局_转换内容文本型
置入代码 ({ 139, 93, 8, 139, 125, 12, 139, 77, 16, 139, 117, 20, 139, 54, 176, 37, 170, 172, 138, 224, 192, 232, 4, 215, 170, 138, 196, 36, 15, 215, 170, 226, 237, 51, 192, 170, 201, 194, 16, 0 })
子程序名返回值类型公开备 注
汇编URL半编码  
参数名类 型参考可空数组备 注
局_表整数型
局_表2整数型
局_目标地址整数型
局_转换内容长度整数型
局_转换内容文本型
置入代码 ({ 96, 139, 125, 16, 139, 77, 20, 139, 117, 24, 139, 54, 172, 81, 87, 185, 75, 0, 0, 0, 139, 125, 12, 242, 174, 95, 89, 116, 20, 80, 176, 37, 170, 88, 138, 224, 192, 232, 4, 139, 93, 8, 215, 170, 138, 196, 36, 15, 215, 170, 226, 216, 51, 192, 170, 97, 201, 194, 20, 0 })
子程序名返回值类型公开备 注
编码_URL编码_快速文本型 快速URL编码
参数名类 型参考可空数组备 注
参_编码文本文本型需要URL编码的文本内容
参_是否不编码字母数字逻辑型不编码字母数字及符号
变量名类 型静态数组备 注
局_表1文本型 
局_返回值文本型 
局_待转换文本文本型 
局_表2文本型 
局_表1 = “0123456789ABCDEF”
局_表2 = “0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ;/?:@&=+$,#.-”
局_返回值 = 取空白文本 (取文本长度 (参_编码文本) × 3)
如果 (参_是否不编码字母数字 = )
汇编URL半编码 (取变量数据地址_文本 (局_表1), 取变量数据地址_文本 (局_表2), 取变量数据地址_文本 (局_返回值), 取文本长度 (参_编码文本), 参_编码文本)
汇编URL全编码 (取变量数据地址_文本 (局_表1), 取变量数据地址_文本 (局_返回值), 取文本长度 (参_编码文本), 参_编码文本)
返回 (局_返回值)

评分

参与人数 1好评 +1 精币 +1 收起 理由
项目部002 + 1 + 1 支持开源~!感谢分享

查看全部评分

结帖率:100% (11/11)

签到天数: 25 天

 楼主| 发表于 2018-9-4 12:25:22 | 显示全部楼层   陕西省渭南市
今天统一补上注释.汇编没留源格式真的失败啊.

  
子程序名返回值类型公开备 注
汇编URL全编码  
参数名类 型参考可空数组备 注
局_表整数型
局_目标地址整数型
局_转换内容长度整数型
局_转换内容文本型
置入代码 ({ 139, 93, 8, 139, 125, 12, 139, 77, 16, 139, 117, 20, 139, 54, 176, 37, 170, 172, 138, 224, 192, 232, 4, 215, 170, 138, 196, 36, 15, 215, 170, 226, 237, 51, 192, 170, 201, 194, 16, 0 })
' mov ebx,dword ptr [ebp+08h]  取转换表地址
' mov edi,dword ptr [ebp+0Ch]  返回数值地址
' mov ecx,dword ptr [ebp+10h]  取长度
' mov esi,dword ptr [ebp+14h]  源文本
' mov esi,dword ptr [esi]
' Label1:
' mov al,25h  写入%
' stosb
' lodsb
' mov ah,al
' shr al,04h   取表索引值
' xlatb     取表项值
' stosb   保存转换内容
' mov al,ah
' and al,0Fh  处理高位
' xlatb
' stosb
' loop Label1  循环处理
' xor eax,eax  写入文本结束标志
' stosb
' leave
' retn 0010h
子程序名返回值类型公开备 注
汇编URL半编码  
参数名类 型参考可空数组备 注
局_表整数型
局_表2整数型
局_目标地址整数型
局_转换内容长度整数型
局_转换内容文本型
置入代码 ({ 96, 139, 125, 16, 139, 77, 20, 139, 117, 24, 139, 54, 172, 81, 87, 185, 75, 0, 0, 0, 139, 125, 12, 242, 174, 95, 89, 116, 20, 80, 176, 37, 170, 88, 138, 224, 192, 232, 4, 139, 93, 8, 215, 170, 138, 196, 36, 15, 215, 170, 226, 216, 51, 192, 170, 97, 201, 194, 20, 0 })
' pushad  代码长时记不清使用了哪些寄存器.不如全保存好了
' mov edi,dword ptr [ebp+10h]  取转换内容表地址
' mov ecx,dword ptr [ebp+14h]   取URL编码字符表地址
' mov esi,dword ptr [ebp+18h]   取长度
' mov esi,dword ptr [esi]     转换内容
' Label2:
' lodsb
' push ecx
' push edi
' mov ecx,0000004Bh
' mov edi,dword ptr [ebp+0Ch]
' repne scasb   判断是否是编码表中的字符内容
' pop edi
' pop ecx
' je Label1  如果是字符,跳过
' push eax
' mov al,25h  保存%符号
' stosb
' pop eax
' mov ah,al
' shr al,04h
' mov ebx,dword ptr [ebp+08h]
' xlatb   取表索引对应内容
' stosb
' mov al,ah
' and al,0Fh
' xlatb   取高位表项内容
' Label1:
' stosb
' loop Label2
' xor eax,eax
' stosb   写文本结束标记
' popad
' leave
' retn 0014h
子程序名返回值类型公开备 注
编码_URL编码_快速文本型 快速URL编码
参数名类 型参考可空数组备 注
参_编码文本文本型需要URL编码的文本内容
参_是否不编码字母数字逻辑型不编码字母数字及符号
变量名类 型静态数组备 注
局_表1文本型 
局_返回值文本型 
局_待转换文本文本型 
局_表2文本型 
' 二进制数快速对应表内容.实现快速转换
局_表1 = “0123456789ABCDEF”
' URL编码中字符内容
局_表2 = “0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ;/?:@&=+$,#.-”
' 预申请返回内容空间
局_返回值 = 取空白文本 (取文本长度 (参_编码文本) × 3)
' 汇编代码短小快,难控制.所以为了稳定和更有效,把代码分成了两部分,方便维护和提高效率.
如果 (参_是否不编码字母数字 = )
汇编URL半编码 (取变量数据地址_文本 (局_表1), 取变量数据地址_文本 (局_表2), 取变量数据地址_文本 (局_返回值), 取文本长度 (参_编码文本), 参_编码文本)
汇编URL全编码 (取变量数据地址_文本 (局_表1), 取变量数据地址_文本 (局_返回值), 取文本长度 (参_编码文本), 参_编码文本)
返回 (局_返回值)

回复 支持 反对

使用道具 举报

发表于 2023-10-26 14:26:12 | 显示全部楼层   浙江省嘉兴市
11111111111111111
回复 支持 反对

使用道具 举报

结帖率:52% (11/21)
发表于 2018-9-20 15:41:58 | 显示全部楼层   江苏省苏州市
jr21066 发表于 2018-9-20 15:39
表2的长度我写死了.要保持长度不变才行

我试试吧,好像加=号可以的,但是_下划线不行,而且我这个长度没有你原来的长,要不你试试呢

点评

改了个专用的.回到你的帖子了.不过要审核....   陕西省渭南市  发表于 2018-9-20 15:46
回复 支持 反对

使用道具 举报

结帖率:100% (11/11)

签到天数: 25 天

 楼主| 发表于 2018-9-20 15:39:56 | 显示全部楼层   陕西省渭南市

表2的长度我写死了.要保持长度不变才行
回复 支持 反对

使用道具 举报

结帖率:52% (11/21)
发表于 2018-9-20 15:39:10 | 显示全部楼层   江苏省苏州市
jr21066 发表于 2018-9-20 15:34
红框里的.找一个可能用不上的符号.修改成下划线就好了.

这样不行                             

我这样做的,不行

我这样做的,不行
回复 支持 反对

使用道具 举报

结帖率:100% (11/11)

签到天数: 25 天

 楼主| 发表于 2018-9-20 15:34:54 | 显示全部楼层   陕西省渭南市

红框里的.找一个可能用不上的符号.修改成下划线就好了.
screenshot_20180920_153420.png

点评

第二个参数.真.不编码数字符号   陕西省渭南市  发表于 2018-9-20 15:35
回复 支持 反对

使用道具 举报

结帖率:52% (11/21)
发表于 2018-9-20 15:31:45 | 显示全部楼层   江苏省苏州市
jr21066 发表于 2018-9-17 23:47
为了简单.我没有计算表的长度.而是使用了固定长度.

一个方法是你替换表中的一个符号 .另一个方法是修 ...

看不懂 汇编
回复 支持 反对

使用道具 举报

结帖率:100% (11/11)

签到天数: 25 天

 楼主| 发表于 2018-9-17 23:47:28 | 显示全部楼层   陕西省渭南市
taohongsen1990 发表于 2018-9-17 15:39
楼主,下划线 "_" 怎么用 半编码的方式 编码呢,我在 局_表2 中增加好像没有用啊

为了简单.我没有计算表的长度.而是使用了固定长度.

一个方法是你替换表中的一个符号 .另一个方法是修改这里的ecx后的值
Label2:
lodsb
push ecx
push edi
mov ecx, 0x0000004B



增加一个字符就加一.是十六进制.
回复 支持 反对

使用道具 举报

结帖率:52% (11/21)
发表于 2018-9-17 15:39:43 | 显示全部楼层   江苏省苏州市
楼主,下划线 "_" 怎么用 半编码的方式 编码呢,我在 局_表2 中增加好像没有用啊
回复 支持 反对

使用道具 举报

结帖率:100% (11/11)

签到天数: 25 天

 楼主| 发表于 2018-9-8 12:46:24 | 显示全部楼层   陕西省渭南市
项目部002 发表于 2018-9-8 09:25
感谢楼主分享,如果有可能,可以尝试整理一份汇编类的编码转换,这样便于分类调用。

好的
完了qq吗
回复 支持 反对

使用道具 举报

发表于 2018-9-8 09:25:48 | 显示全部楼层   广东省揭阳市
感谢楼主分享,如果有可能,可以尝试整理一份汇编类的编码转换,这样便于分类调用。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 诚聘英才| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 800073686,邮箱:800073686@b.qq.com
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表