怎么处理字符编码

zhangxuyu1118 2013-07-30 12:45:45
html代码:
<html>
<head>
<title>test</title>

</head>

<body>
<form method="post" action="http://www.icmeter.com:60000">
<textarea name="xmlData" rows="10" cols="50">
<RD>
<Task ID="14567" TYPE="CMD" />
<CJQ ID="1"/>
<CMD DATA="6820AAAAAAAAAAAAAA0303810AC016" />
</RD>
</textarea>
<input type="submit" value="提交">
</form>
</body>
</html>

提交后服务器端收到:xmlData=%3CRD%3E%0D%0A%3CTask+ID%3D%2214567%22+TYPE%3D%22CMD%22+%2F%3E%0D%0A%3CCJQ+ID%3D%221%22%2F%3E%0D%0A%3CCMD+DATA%3D%226820AAAAAAAAAAAAAA0303810AC016%22+%2F%3E%0D%0A%3C%2FRD%3E%0D%0A%09

问:这个编码怎样处理比较合适?

...全文
181 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhangxuyu1118 2013-07-30
  • 打赏
  • 举报
回复
客户端POST一个XML,一般怎么做的
fzfei2 2013-07-30
  • 打赏
  • 举报
回复
引用 10 楼 zhangxuyu1118 的回复:
后台是C++代码,接收到 xmlData=%3CRD%3E%0D%0A%3CTask+ID%3D%2214567%22+TYPE%3D%22CMD%22+%2F%3E%0D%0A%3CCJQ+ID%3D%221%22%2F%3E%0D%0A%3CCMD+DATA%3D%226820AAAAAAAAAAAAAA0303810AC016%22+%2F%3E%0D%0A%3C%2FRD%3E%0D%0A%09 后做解码
简单写了个 C++ 的 unescape,没考虑双字字符

#include <math.h> 
#include <iostream>  
#include <string> 
using namespace std;

long hex2dec(char * s){
	int L=strlen(s);
	char c;
	long re=0;
	 while(c=s++[0]){
		 if(c >='0' && c <='9'){
			c-=48;
		 }else{
			 c=c>'Z'? c-32:c; 
			c-='A'-10;	
		 }
		re+= c*pow(  16 ,--L) ;
	 }
	 return re;
 } 

string unescape(char * str){

	char* re =(char *)calloc( strlen(str) +1,1);
	char *_str;
	char * _re=re;
	int n;
	char code[5]={0};
	
	 char c;
	while(str){
		_str= strchr(str,'%') ;
		if(!_str) break;
		strset(code,0);
		if(_str[0]=='u'){
			memcpy(code,_str+1,4);	
		}else{
			memcpy(code,_str+1,2);
		}
		c=(char)hex2dec(code);
		if( n=_str-str ){
			 memcpy(_re,str, n   );
			_re+=n;
		}
		_re[0]=c;
		_re++;	
		str=_str+3;	
	}
	return re;
	cout << re << endl;  
}
int main(int argc, char* argv[])
{
	char* str="%3CRD%3E%0D%0A%3CTask+ID%3D%2214567%22+TYPE%3D%22CMD%22+%2F%3E%0D%0A%3CCJQ+ID%3D%221%22%2F%3E%0D%0A%3CCMD+DATA%3D%226820AAAAAAAAAAAAAA0303810AC016%22+%2F%3E%0D%0A%3C%2FRD%3E%0D%0A%09";
 
	cout<<  unescape(str)  << endl;
	return 0;
}
街头小贩 2013-07-30
  • 打赏
  • 举报
回复
引用 10 楼 zhangxuyu1118 的回复:
后台是C++代码,接收到 xmlData=%3CRD%3E%0D%0A%3CTask+ID%3D%2214567%22+TYPE%3D%22CMD%22+%2F%3E%0D%0A%3CCJQ+ID%3D%221%22%2F%3E%0D%0A%3CCMD+DATA%3D%226820AAAAAAAAAAAAAA0303810AC016%22+%2F%3E%0D%0A%3C%2FRD%3E%0D%0A%09 后做解码
c++不会,不过相信应该也有相应的转换方法。
zhangxuyu1118 2013-07-30
  • 打赏
  • 举报
回复
后台是C++代码,接收到 xmlData=%3CRD%3E%0D%0A%3CTask+ID%3D%2214567%22+TYPE%3D%22CMD%22+%2F%3E%0D%0A%3CCJQ+ID%3D%221%22%2F%3E%0D%0A%3CCMD+DATA%3D%226820AAAAAAAAAAAAAA0303810AC016%22+%2F%3E%0D%0A%3C%2FRD%3E%0D%0A%09 后做解码
街头小贩 2013-07-30
  • 打赏
  • 举报
回复

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
</head>

<body>
<form enctype="application/x-www-form-urlencoded" accept-charset="utf-8" method="post" action="http://gateway.renzhe.com/">
<textarea rows="3" cols="60" name="message"></textarea>
<input type="submit" value="post" />
</form>
</body>
</html>
PHP

<?php
header('Content-Type: text/xml; charset=utf-8'); 
$t='<?xml version="1.0" encoding="utf-8"?>';
$t.=$_POST['message'];

echo $t;
flush(); 
?>
fzfei2 2013-07-30
  • 打赏
  • 举报
回复
这是被 escape 过了,不知你后台用什么,应该都有对应的 unescape 方法 unescape 一下就出来了
街头小贩 2013-07-30
  • 打赏
  • 举报
回复
引用 1 楼 zhangxuyu1118 的回复:
客户端POST一个XML,一般怎么做的
你这叫post xml吗?最多是post了一个像xml的字符串.post内容的编码 跟你当前页面的encode(表单所在页面的encode)有很大关系.
zhangxuyu1118 2013-07-30
  • 打赏
  • 举报
回复
%3c表示<可以理解,可是+为什么表示空格呢
  • 打赏
  • 举报
回复
php不太清楚。。 asp.net的话会自动解码为对应的字符串,然后使用处理xml的类加载xml字符串得到xmldom就可以操作了,或者直接写入xml文件中
zhangxuyu1118 2013-07-30
  • 打赏
  • 举报
回复
HTTP服务器要我做的。那么需要在我这端做解码了
xuzuning 2013-07-30
  • 打赏
  • 举报
回复
正常情况下,web 服务器会自动解码传入的参数 既然你的没有,那么就自己做一下url解码 你得到的是一个 xml 文本 你可以直接用字符串函数处理 也可以用你的服务器支持的任何一款xml工具进行处理
宇宙浪子 2013-07-30
  • 打赏
  • 举报
回复
一般情况下,你使用form表达提交的编码很容易处理啊,所有的编码都统一,在服务器端设置request.setCharacterEncoding("UTF-8");就可以了。只有通过url方式提交的中文参数会出现乱码问题不易解决,其他的没问题的 这个或许对你有些帮助http://blog.csdn.net/elvis_chow/article/details/6722328

87,991

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧