问题描述:
在使用php和java操作xml-rpc的时候,如果request中包含中文字符,会被自动编码成如下样式:
欢欢 。
环境:php内置xml-rpc的api,apache的xml-rpc的java api
php下的解决方法:
起初以为是中文字符的编码问题,所以我就尝试用各种编码方式来编码中文字符,然后交给string xmlrpc_encode_request ( string method, mixed params)函数来生成xml格式的请求,可是依然如故。百思不得其界。便操其google 一通神搜,也没找到解决办法,后来我找到了http://xmlrpc-epi.sourceforge.net/这个网站。才知道,原来php文档里给的xmlrpc_encode_request ( string method, mixed params)函数少了一个可选参数!!!!正确的应该是这样的:string xmlrpc_encode_request(string method, mixed params [, array output_options])!!output_options的结构如下:
$output_options = array(
"output_type" => "xml",
"verbosity" => "pretty",
"escaping" => array("markup", "non-ascii", "non-print"),
"version" => "xmlrpc",
"encoding" => "utf-8"
);
or
$output_options = array("output_type" => "php");
原文说明如下:
output_type: return data as either php native data types or xml encoded. ifphp is used, then the other values are ignored. default = xml
verbosity: determine compactness of generated xml. options are no_white_space, newlines_only, and pretty. default = pretty
escaping: determine how/whether to escape certain characters. 1 or more values are allowed. if multiple, they need to be specified as a sub-array. options are: cdata, non-ascii, non-print, and markup.default = non-ascii, non-print, markup
version: version of xml vocabulary to use. currently, three are supported: xmlrpc, soap 1.1, and simple. the keyword auto is also recognized to mean respond in whichever version the request came in. default = auto (when applicable), xmlrpc
encoding: the encoding that the data is in. since php defaults to iso-8859-1 you will usually want to use that. change it if you know what you are doing. default=iso-8859-1
经过测试关键是在"escaping" => array("markup")这个值上,将第三个参数传入如下值就可以解决问题了:
$output_options = array(
"output_type" => "xml",
"verbosity" => "pretty",
"escaping" => array("markup"),
"version" => "xmlrpc",
"encoding" => "utf-8"
);
找遍了apache提供的api好像也没有找到类似php那样的第三个参数,实在无奈发现他提供了一个base64的类,我便只好将所有的中文字符在client端用 base64编码,然后request到server上,然后在server端在用base64解码,哈哈~~~问题也能解决!不过不知道还有没别的更好的办法了?
谁有更好的解决方法请和我联系:
qq:3470431
msn:imdishui@hotmail.com
email:wangsg@asiainfo.com
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器