51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

查看: 4353|回复: 4
打印 上一主题 下一主题

[原创] 一个特殊的内码转换处理对于XML格式的UTF-8

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2009-12-19 09:33:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

一般来说我们所使用的中文网站都是基于UTF-8的,只需要在录制或者是回放时设置对应的编码就行了,但是随着技术的升级,慢慢的我们发现有些内容的UTF-8无法处理了。

例如在新版的discuz!.net 3.0中,采用了新的AJAX处理方法,将登陆成功的信息通过UTF-8 的XML返回,这样就出现了一个问题,无法针对这个返回进行检查点函数了(LR不会对返回的XML进行UTF-8解析),这里给出两个解决方案:

1.检查点函数直接用UTF-8编码后的乱码来做


 web_reg_find("Search=Body",
  "SaveCount=loginst",
  "Text=登录成功",
  LAST);


 web_submit_data("login.aspx_2",
  "Action=http://172.168.2.200:8081/login.aspx?infloat=1&&inajax=1",
  "Method=POST",
  "TargetFrame=",
  "RecContentType=text/xml",
  "Referer=http://172.168.2.200:8081/",
  "Snapshot=t3.inf",
  "Mode=HTML",
  ITEMDATA,
  "Name=username", "Value=admin", ENDITEM,
  "Name=password", "Value=51testing", ENDITEM,
  "Name=question", "Value=0", ENDITEM,
  "Name=answer", "Value=", ENDITEM,
  "Name=templateid", "Value=0", ENDITEM,
  LAST);

 

2.通过关联获得这块文字,再通过函数转换内码

web_reg_save_param("login",
  "LB=<p>",
  "RB=</p>",
  "Ord=1",
  "Search=Body",
  LAST);


 web_submit_data("login.aspx_2",
  "Action=http://172.168.2.200:8081/login.aspx?infloat=1&&inajax=1",
  "Method=POST",
  "TargetFrame=",
  "RecContentType=text/xml",
  "Referer=http://172.168.2.200:8081/",
  "Snapshot=t3.inf",
  "Mode=HTML",
  ITEMDATA,
  "Name=username", "Value=admin", ENDITEM,
  "Name=password", "Value=51testing", ENDITEM,
  "Name=question", "Value=0", ENDITEM,
  "Name=answer", "Value=", ENDITEM,
  "Name=templateid", "Value=0", ENDITEM,
  LAST);

lr_convert_string_encoding(lr_eval_string("{login}"),"utf-8",NULL,"my");

这里使用函数lr_convert_string_encoding函数,将login参数中的utf-8编码转换为当前系统的编码,最后在my参数中会出现登陆成功的内容,这样就可以在通过字符串比较来确认事务是否成功了。

 

另:奇怪的是用lr_convert_string_encoding将"登陆成功"转换为utf-8再去做检查点判断时,会检查不到该内容,可能是内码转换后格式还是有些不同导致的,所以没有采用先转内码再对转化后的内码做检查点的方式。

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
发表于 2009-12-28 09:00:03 | 只看该作者
直接encoding64再decoding64
万用编码解决方案
回复 支持 反对

使用道具 举报

该用户从未签到

3#
 楼主| 发表于 2009-12-28 11:09:15 | 只看该作者
lr_convert_string_encoding函数,但是在使用这个函数的时候会有个小问题,就是用该函数转出来的内容会自动附加一个/x00的结尾,导致如果用他来做关联或者检查点的匹配会错误。

lr_convert_string_encoding("登陆成功",NULL,"UTF-8","temp");

如果这样用得出的结果是

&ccedil;™&raquo;&aring;&frac12;•&aelig;ˆ&aring;ŠŸ\x00

而正确的结果应该是

&ccedil;™&raquo;&aring;&frac12;•&aelig;ˆ&aring;ŠŸ

为了去掉这个最后的\x00,可以通过下面这个办法去掉
lr_save_string(lr_eval_string("{temp}"),"temp");

当你对一个带有/x00的参数取值时,会自动去除掉,所以只需要再存一次就行了
回复 支持 反对

使用道具 举报

该用户从未签到

4#
发表于 2009-12-28 21:44:18 | 只看该作者
用正则去除多余字符吧
不过传参的时候在中间部分就转换好不是更好么
传出的时候ENCODE   收到的时候再DECODE传出    这样的话就算转换的时候有\x00  也不会对结果产生影响
回复 支持 反对

使用道具 举报

该用户从未签到

5#
发表于 2012-6-27 11:10:44 | 只看该作者
其实LR需要改进的地方挺多的,hp怎么就不作为呢
回复 支持 反对

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-5-5 17:41 , Processed in 0.072935 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

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