Home > Backend Development > PHP Tutorial > Solution to XML-RPC Chinese problem with PHP and JAVA_PHP tutorial

Solution to XML-RPC Chinese problem with PHP and JAVA_PHP tutorial

WBOY
Release: 2016-07-21 16:12:07
Original
804 people have browsed it

      问题描述:
      在使用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 JAVA XML-RPC的解决方法

     找遍了Apache提供的API好像也没有找到类似PHP那样的第三个参数,实在无奈发现他提供了一个Base64的类,我便只好将所有的中文字符在Client端用 Base64编码,然后request到Server上,然后在Server端在用Base64解码,哈哈~~~问题也能解决!不过不知道还有没别的更好的办法了?

     谁有更好的解决方法请和我联系:
     QQ:3470431
     MSN:imdishui@hotmail.com
     Email:wangsg@asiainfo.com

www.bkjia.comtruehttp: //www.bkjia.com/PHPjc/313778.htmlTechArticleProblem Description: When using PHP and JAVA to operate XML-RPC, if the request contains Chinese characters, it will be Automatically encode into the following style: . Environment: PHP built-in XML-RPC API, Apache...
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template