Delphi POS函数中文处理的问题

傻猫网络日志 发布于2010-03-01 13:45 | 278次阅读 | 字体: 打印预览


photo

delphi漏洞 pos()函数的奇怪现象

edit1.Text := intToStr(pos(市,资中市));
结果=5,正确.

edit1.Text := intToStr(pos(市,资兴市));
结果=2 . -_-?

edit1.Text := intToStr(pos(市,湖南省郴州市资兴市));
结果=11,正确.

edit1.Text := intToStr(pos(市,湖南省资兴市郴州市));
结果=8 . -_-?

以上结果都进行调试过,有没高手知道为什么会这样的?

---------------------------------------------

因为“资”的后半部分加上“兴”的前半部分就是“市”。
s1:=资;
s2:=兴;
ShowMessage(s1[2]+s2[1]);

不是漏洞,是由于汉字由两个字节组成的,使用WideString就Ok了
试试看:
edit1.Text := intToStr(pos(市,WideString(资中市)));
//结果=3,正确.

edit1.Text := intToStr(pos(市,WideString(资兴市)));
//结果=3

photo

本文出处 : http://www.samool.com/archives/delph-pos-bug/ end

上一篇:Sablog-X 2.X 后台管理权限欺骗漏洞

下一篇:联合国教科文组织授予成都